请尝试按照下面的图片与我联系。 ViewController A 正在以模态方式推送 navController A ,而 ViewController A 通过 ViewController F 显示为segues。这样做的原因是我需要UINavigationBar
才能在不同的UIViewControllers
之间来回切换。但是,在此交互行中的某一点,您实际上可以推送另一个导航交互线,从 ViewController B 到 navController B 。它们最终都会以 ViewController F 结束,但数据略有不同。当我到达 ViewController F 并且我已完成UIViewController
时,我想立即返回 ViewController A ,而不会看到多个关闭动画。
为此,我使用了各种不同的代码行,但它们最终都遇到了同样的问题。我可以让他们解雇,所以我最终在 ViewController A 。但是,当我使用 navController B 使用交互线时,它将动画解除 ViewController F ,但仍会有 ViewController F 解雇后,当动画完成时,它会闪烁,我最终会在 ViewController A 。基本上它看起来在我正在解雇的那个背后有另一个 ViewController F ,但是没有(我已经在Xcode中查看了3D视图)。
我似乎无法修复它。我尝试删除 navController B 并且它工作正常,我只看到1个动画并最终在 ViewController A 没有上面解释的问题,但我必须有 navController B 那里。简单地说,当使用多个UINavigationControllers
模态视图时似乎存在问题。
解雇代码:ViewControllerA.dismissViewControllerAnimated(true, completion: nil)
答案 0 :(得分:0)
我会尽量避免在模态视图上显示模态视图。考虑将视图控制器G从视图控制器B推送到相同的导航流程,而不是以模态方式呈现它。这将允许您始终只关闭NavController A的一个导航流。
答案 1 :(得分:0)
我最终做的是检查 ViewController F 的PresentingViewController
是否 ViewController A ,因为如果您通过ViewController G { {1}}将是 ViewController B。并且在 ViewController F 中,我首先解除了没有动画的前模态演示,然后是动画的第二个。看起来没问题。
PresentingViewController
if let _ = presentingViewController as? ViewControllerA {
view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
} else {
dismissViewControllerAnimated(false, completion: nil)
view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
}
将开始从view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
中删除所有模态。只需在rootViewController
- 子句中相互添加两个dismissViewControllerAnimated()
即可。