返回 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】:
您可以在视图控制器中使用viewWillAppear
、viewDidAppear
、viewWillDisappear
和viewDidDisappear
。这独立于UINavigationController
。
【讨论】:
我遇到了viewWillDisappear:
的问题,相关方法并不总是在UINavigationController
中调用。我建议你让导航控制器的委托实现navigationController:willShowViewController:animated:
,并在显示的任何视图控制器上调用自定义方法。【参考方案3】:
UINavigationController 也有两个委托方法。也许他们会帮助你:
navigationController:willShowViewController:animated: navigationController:didShowViewController:animated:
【讨论】:
以上是关于返回 UINavigationController 根视图时调用了哪些方法?的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController - 返回按钮弹出到某个 UIViewController
返回 UINavigationController 根视图时调用了哪些方法?
使用 UINavigationController 设置没有返回选项的路径
使用 UINavigationController 返回时是不是有类似 prepareForSegue 的东西?