iOS 快速展开 2 个视图控制器并显示另一个

Posted

技术标签:

【中文标题】iOS 快速展开 2 个视图控制器并显示另一个【英文标题】:iOS swift unwind 2 view controllers and show another one 【发布时间】:2018-01-29 15:42:44 【问题描述】:

我有 4 个视图控制器(A、B、C、D)。我可以从 A -> B , B -> C. 在视图控制器 C 中我想要做的事情,删除 B 和 C 然后显示视图控制器 D. 这样如果我从 D 返回它会转到 A.

我想通过平滑过渡来执行此操作。 D 已经实现了 UIViewControllerTransitioningDelegate 方法。因此,在 C 中,我应该能够移除自身,然后 B 然后用 D 的转换显示 D,就像什么都没发生一样。我没有使用 NavigationController。我可以使用哪些方法来做到这一点?

我正在使用 Xcode 9 和 Swift 4 谢谢

【问题讨论】:

我已经尝试过展开到 A 并在 A 的展开方法中呈现 D,但它说 A 还没有在窗口层次结构中 我遇到了同样的问题,但无法解决:***.com/questions/46054177/… 我认为在你的情况下,解决方案是使用 unwind segue。也许这会有所帮助。 youtube.com/watch?v=akmPXZ4hDuU A 是你的窗口根视图控制器吗?? 是的,它是根 VC 【参考方案1】:

假设所有的viewController都在同一个UINavigationController下,不如试试使用navigationController的setViewControllers:animated:方法,设置数组为[viewControllerA],

popToViewController:animated:并传入viewController A,

或者假设 VC A 是根 VC,使用 popToRootViewControllerAnimated: 弹出到根目录。

希望对你有帮助

【讨论】:

不幸的是,我没有使用导航控制器。是否可以使用导航控制器而不在视图顶部显示导航栏? 是的,在 UINavigationController 中使用isNavigationBarHidden 属性或setNavigationBarHidden(_:animated:) 方法【参考方案2】:

因为我找不到删除 D 下面的 VC 的方法。我采用了另一种方法。当 Ds Segue 完成(完成从 C 的过渡)后,我清理了 B 和 Cs 资源。这释放了内存。所以这就是我找到的解决方法。

当我从 D 放松到 A 时,所有高于 A 的 VC 都会自动删除

【讨论】:

以上是关于iOS 快速展开 2 个视图控制器并显示另一个的主要内容,如果未能解决你的问题,请参考以下文章

如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS

试图显示从一个视图控制器捕获的 UIImage,并在 iOS 中的另一个视图控制器中显示它

iOS 11 navigationitem大标题不能为TabBarController正确展开/折叠

在导航控制器不工作的情况下快速展开 segue Xcode 10

在另一个视图控制器展开 segue 后重新加载 UIView 数据上的自定义 tableview

iOS 使用 TabBar 改变显示的视图