使用多个导航控制器关闭多个模态视图
Dismiss multiple modal views with several navigation controllers
尝试通过下面的图片跟随我。 ViewController A 模态地推动 navController A,这反过来显示 ViewController A 通过 ViewController F 显示转场。这样做的原因是我需要一个 UINavigationBar
以便在不同的 UIViewControllers
之间来回移动。但是在这条交互线的某个点上你实际上可以上推另一条导航交互线,从ViewController B到navController B。它们最终都将以 ViewController F 结束,但数据略有不同。当我到达 ViewController F 并且我已经完成 UIViewController
时,我想 return 到 ViewController A 立即,没有看到多个关闭动画。
为此,我使用了各种不同的代码行,但它们最终都遇到了同样的问题。我可以让他们解雇罚款,所以我最终得到 ViewController A。但是当我使用 navController B 使用交互线时,它会动画化 ViewController F 的解雇,但仍然会有a ViewController F 在解雇之后,当动画完成时它闪烁消失,我最终在 ViewController A.基本上看起来在我要解雇的那个后面还有另一个 ViewController F,但是没有(我已经在 [=60= 的 3D 视图中检查过]).
我似乎无法修复它。我尝试删除 navController B 并且它工作正常,我只看到 1 个动画并最终在 ViewController A 没有上面解释的问题,但我必须在那里设置 navController B。简而言之,在模式视图中使用多个 UINavigationControllers
时似乎存在问题。
关闭代码:ViewControllerA.dismissViewControllerAnimated(true, completion: nil)
我会尽量避免在模态视图上呈现模态视图。考虑将 View Controller G 从 View Controller B 推送到相同的导航流,而不是以模态方式呈现它。这将允许您始终只关闭 NavController A 的一个导航流。
我最后做的是检查 ViewController F 处的 PresentingViewController
是否是 ViewController A 或不是,因为如果你经过 ViewController G,PresentingViewController
将是 ViewController B. 而在 ViewControllerF我先把前面没有动画的模态展示给忽略掉了,然后第二个有动画的。看起来还行。
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
的所有模态。仅仅在 else
子句中相继添加两个 dismissViewControllerAnimated()
是行不通的。
尝试通过下面的图片跟随我。 ViewController A 模态地推动 navController A,这反过来显示 ViewController A 通过 ViewController F 显示转场。这样做的原因是我需要一个 UINavigationBar
以便在不同的 UIViewControllers
之间来回移动。但是在这条交互线的某个点上你实际上可以上推另一条导航交互线,从ViewController B到navController B。它们最终都将以 ViewController F 结束,但数据略有不同。当我到达 ViewController F 并且我已经完成 UIViewController
时,我想 return 到 ViewController A 立即,没有看到多个关闭动画。
为此,我使用了各种不同的代码行,但它们最终都遇到了同样的问题。我可以让他们解雇罚款,所以我最终得到 ViewController A。但是当我使用 navController B 使用交互线时,它会动画化 ViewController F 的解雇,但仍然会有a ViewController F 在解雇之后,当动画完成时它闪烁消失,我最终在 ViewController A.基本上看起来在我要解雇的那个后面还有另一个 ViewController F,但是没有(我已经在 [=60= 的 3D 视图中检查过]).
我似乎无法修复它。我尝试删除 navController B 并且它工作正常,我只看到 1 个动画并最终在 ViewController A 没有上面解释的问题,但我必须在那里设置 navController B。简而言之,在模式视图中使用多个 UINavigationControllers
时似乎存在问题。
关闭代码:ViewControllerA.dismissViewControllerAnimated(true, completion: nil)
我会尽量避免在模态视图上呈现模态视图。考虑将 View Controller G 从 View Controller B 推送到相同的导航流,而不是以模态方式呈现它。这将允许您始终只关闭 NavController A 的一个导航流。
我最后做的是检查 ViewController F 处的 PresentingViewController
是否是 ViewController A 或不是,因为如果你经过 ViewController G,PresentingViewController
将是 ViewController B. 而在 ViewControllerF我先把前面没有动画的模态展示给忽略掉了,然后第二个有动画的。看起来还行。
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
的所有模态。仅仅在 else
子句中相继添加两个 dismissViewControllerAnimated()
是行不通的。