【问题标题】:My Navigation Controller Count Keeps Growing我的导航控制器数量不断增长
【发布时间】:2014-02-07 13:05:34
【问题描述】:

我是 iOS 开发新手,对 Storyboards/Segues/Pushing and Popping 不太确定。

所以在我的应用程序中,我有一个导航控制器,其中有 5 个视图控制器从一个到另一个。

当它到达最后一个视图控制器时,我会转到第一个视图控制器,并且我在 prepareForSegue 方法中列出了一些任务。

出于好奇,我决定检查[self.navigationController.viewControllers count] 发生了什么。我发现它一直在增长,这并不“感觉”正确。

我是否正确地返回到第一个屏幕? prepareForSegue 方法很有用,因为它允许我将一些数据发送回第一个 segue。是否可以说当您返回时清除该导航控制器上的所有视图?

谢谢

【问题讨论】:

  • 如果可以的话,你可以试试[self.navigationController popToRootViewControllerAnimated:NO],而不是先push吗?

标签: ios uinavigationcontroller uistoryboardsegue


【解决方案1】:

您可以使用展开转场。这是一个很好的教程:

pragmaticstudio.com/blog/2013/2/5/unwind-segues

确保在将其连接到情节提要之前创建展开操作方法,否则当您拖动到“退出”时它不会显示。当我第一次设置时,这对我来说是最令人困惑的部分。本教程以正确的顺序进行,所以如果你按照它应该没问题。

另外,我整理了一个示例,展示了如何在展开转场中将数据传回。它使用模态呈现的视图控制器,但技术是相同的:

github.com/soleares/AddToTableView

【讨论】:

  • 谢谢 - 那是我关注的。我很惊讶/很高兴它的工作原理:-)
【解决方案2】:

不,你永远不应该使用 segue 倒退(除了放松)。 Segues 总是实例化新的控制器,所以你实际上并没有回到第一个控制器,你只是创建了一个新的实例,它被添加到堆栈中。所以要么返回一个 unwind segue,要么使用 popToViewController:animated:。使用 unwind segue 将允许您使用 prepareForSegue,它确实会导致中间的所有控制器被释放(如果您没有其他强指针指向它们)。

【讨论】:

  • 太棒了,谢谢 - 我会读到 unwind segues。它是否非常直接,即在 IB 中准备好?
  • @userMod2,它在 IB 中部分设置,但您需要在要返回的控制器中添加一个方法(一个非常简单的方法)。该方法实际上不需要任何代码,它只需要是一个 IBAction(因此它显示在 IB 中)并且它必须有一个 UIStoryboardSegue 类型的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多