【问题标题】: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)

【问题讨论】:

    标签: ios swift uiviewcontroller uinavigationcontroller modalviewcontroller


    【解决方案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() 是行不通的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 2014-10-10
      • 2018-11-27
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2011-03-14
      • 2012-02-08
      相关资源
      最近更新 更多