关闭双模式呈现视图控制器的父视图控制器

Dismissing parent view controller of double modally presented view controller

我有当前设置,其中 -> 是模态显示 (presentViewController()):

ViewController A -> NavigationController B:
    ViewController C
    ViewController D -> ViewController E

我目前在里面 ViewController E。我想关闭所有以模态方式呈现的视图控制器,以便我可以返回 ViewController A。似乎无论我在 ViewController E、(dismissViewController()selfparentViewControllerpresentViewControllernavigationController 上尝试什么,我都可以轻松地解雇ViewController E 但不能关闭 ViewController B 及其所有子视图控制器。在我看来,当 ViewController E 被关闭时,我已经失去了对它的所有引用,ViewController D(导航控制器 NavigationController B) 的子视图控制器仍然可见。

如果能帮助解除 ViewController ENavigationController B 及其所有子视图控制器,我们将不胜感激。

您正在寻找的是所谓的展开转场。我不知道在故事板之外有什么方法可以做到这一点,但基本上你会设置一个从 ViewControllerEViewControllerA 的展开转场,然后在 E 中,像你一样执行转场通常:self.performSegue('UnwindSegue', sender: self)

This 是一篇关于整个主题的非常好的文章。本质上发生的事情是视图控制器堆栈在触发后一直展开到展开转场的出口点,因此您可以从 E 转到 A 没问题。您还可以通过该应用程序进行多个展开转场,只需确保为它们提供标识符即可。

这在注销等场景中非常有用,在这种情况下,用户可能有五个或六个视图控制器,但您的应用程序有一个侧边菜单,用户可以使用它们随时注销。您可以一直放松到第一个视图控制器。