使用多个导航控制器关闭多个模式视图

Posted

技术标签:

【中文标题】使用多个导航控制器关闭多个模式视图【英文标题】:Dismiss multiple modal views with several navigation controllers 【发布时间】:2015-10-29 10:22:38 【问题描述】:

试着跟着我看下面的图片。 ViewController A 以模态方式推送 navController A,依次通过 ViewController F 显示 ViewController A 作为 show segues。这样做的原因是我需要一个UINavigationBar 以便在不同的UIViewControllers 之间来回切换。但是在这条交互线的某一点上,您实际上可以向上推另一条导航交互线,从 ViewController BnavController B。它们最终都会以 ViewController F 结束,但数据略有不同。当我到达 ViewController F 并且我已经完成了那个 UIViewController 时,我想立即返回到 ViewController A,而不会看到多个关闭动画。 p>

为此,我使用了各种不同的代码行,但最终都遇到了相同的问题。我可以让他们很好地解雇他们,所以我最终选择了 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)

【问题讨论】:

【参考方案1】:

我会尽量避免在模态视图上呈现模态视图。考虑将 View Controller G 从 View Controller B 推送到相同的导航流,而不是模态地呈现它。这将允许您始终只关闭 NavController A 的一个导航流。

【讨论】:

是的,根据我们的设计师的说法,目前这不是一个选择。所以我不得不解决这个问题。【参考方案2】:

我最终要做的是检查 ViewController F 处的 PresentingViewController 是否为 ViewController A,因为如果您通过 ViewController G 则 PresentingViewController将是 ViewController B。 而在 ViewController F 中,我首先关闭了没有动画的前端模式演示,然后关闭了第二个带有动画的演示。看起来不错。

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() 是行不通的。

【讨论】:

以上是关于使用多个导航控制器关闭多个模式视图的主要内容,如果未能解决你的问题,请参考以下文章

使用导航关闭模态视图控制器

多个导航控制器中的视图控制器通信

如何将多个自定义视图控制器与导航控制器一起使用?

如何将多个视图控制器推送到导航控制器上

关闭多个视图控制器

在多个情节提要上维护导航栏?