【问题标题】:How do I present a View Controller and dismiss all others?如何呈现视图控制器并关闭所有其他视图控制器?
【发布时间】:2013-01-12 22:37:32
【问题描述】:

我有大约 20 个视图控制器,与 Modal 和 Push segue 链接在一起。现在,在最后一个视图控制器上,我想再次切换回第一个视图控制器,就好像用户重新启动了应用程序一样。不幸的是,当我这样做时

[UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"InitViewController"]];
[self presentViewController:viewController animated:YES completion:nil];

所有之前的视图控制器都没有被卸载。没有调用单个 viewDidUnload 方法。如何做到这一点?

【问题讨论】:

  • 使用导航控制器而不是模式。会很简单。

标签: ios memory-management uiviewcontroller storyboard segue


【解决方案1】:

instantiateViewController 方法会为您的视图控制器创建一个 副本。您现有的视图控制器不会被卸载,因为 iOS 不知道您想要“返回”,可以这么说。它无法卸载任何现有的视图控制器,因为它们仍在导航层次结构中。你真正想做的是以某种方式“倒带”你的故事板。

幸运的是,从 iOS 6 开始,通过 unwinding 有一种改进的方法可以做到这一点。这使您可以在故事板中“回溯”到开始,这听起来像是您想要做的。 WWDC 视频有一些示例和演练,您可能还想看看这个现有的 SO 问题:

What are Unwind segues for and how do you use them?

【讨论】:

    【解决方案2】:

    我发现可以通过在层次结构中的第一个视图控制器上调用 dismissViewControllerAnimated:completion: 来轻松完成。幸运的是,这就是完成我想要的一切所需要的:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多