返回 UINavigationController 根视图时调用了哪些方法?

Posted

技术标签:

【中文标题】返回 UINavigationController 根视图时调用了哪些方法?【英文标题】:What methods are called when returning to UINavigationController's root view? 【发布时间】:2011-11-10 17:29:14 【问题描述】:

当返回到 UINavigationController 的前一个视图或根视图时,会调用哪些方法?

另外,当用户点击后退按钮返回上一个视图时,视图中正在消失的所有内容是否都已释放,并且其值无法从父视图中检索?

【问题讨论】:

【参考方案1】:

viewWillDisappear:animated: 将在视图控制器从导航堆栈中弹出之前被调用。

当用户在导航控制器中“返回”时,您可以在这里做任何您需要做的事情。您可以通过self.navigationController.viewControllers 访问导航堆栈中的任何其他控制器,这是当前堆栈中所有视图控制器的数组,根视图控制器位于索引 0。

【讨论】:

我遇到了viewWillDisappear: 的问题,相关方法并不总是在UINavigationController 中调用。我建议你让导航控制器的委托实现 navigationController:willShowViewController:animated: 并在显示的任何视图控制器上调用自定义方法。 对导航控制器堆栈很感兴趣。但是作为一个例子,如果我说视图控制器的索引 3,然后返回索引 2,我创建并设置为 true 的 bool 的值会丢失吗?还是返回父视图后仍然可以检索?还是只能从父母而不是孩子那里检索变量? 您可以在上述方法中将其传递给父控制器。或者,更常见的是,您的父视图控制器将传递新控制器已修改的某种“详细”对象(即托管对象或字典),然后无需“传递”任何东西。跨度> 【参考方案2】:

您可以在视图控制器中使用viewWillAppearviewDidAppearviewWillDisappearviewDidDisappear。这独立于UINavigationController

【讨论】:

我遇到了viewWillDisappear: 的问题,相关方法并不总是在UINavigationController 中调用。我建议你让导航控制器的委托实现navigationController:willShowViewController:animated:,并在显示的任何视图控制器上调用自定义方法。【参考方案3】:

UINavigationController 也有两个委托方法。也许他们会帮助你:

navigationController:willShowViewController:animated: navigationController:didShowViewController:animated:

【讨论】:

以上是关于返回 UINavigationController 根视图时调用了哪些方法?的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController - 返回按钮弹出到某个 UIViewController

返回 UINavigationController 根视图时调用了哪些方法?

使用 UINavigationController 设置没有返回选项的路径

使用 UINavigationController 返回时是不是有类似 prepareForSegue 的东西?

返回UINavigationController时如何隐藏UITabBar

更改 UINavigationController 视图和按钮(例如返回)中按钮的颜色?