对 UINavigationController 的深入理解

Posted

技术标签:

【中文标题】对 UINavigationController 的深入理解【英文标题】:Deeper understanding of UINavigationController 【发布时间】:2011-04-23 15:22:08 【问题描述】:

我试图更好地理解使用 UINavigationController 创建复杂导航。请,如果我在任何假设(这是可能的)中错了,请告诉我。

据我所知,UINavigationController 似乎是专门为实现一种导航而设计的,其中推送新控制器以“线性”方式提供更深入的数据细节。您可以通过“推”或向后“弹出”控制器来进一步导航。

但是,通常应用程序在每个视图中都有一种方法可以转到另一个视图,该视图不必是父视图,也可以位于堆栈的先前级别(或者根本不存在)。此类应用程序倾向于让用户去任何他想去的地方,这似乎与 UINavigationController 的工作方式相冲突。

在我看来很明显,如果我开始在没有控制的情况下推动控制器,我就会遇到内存问题。

例如,我怎样才能转到堆栈中下两层的视图(例如,“主页”按钮会做什么)?我是否应该将一些控制器/视图作为初始值保存在单例变量中以便更好地访问并避免内存问题?

【问题讨论】:

【参考方案1】:

您可以使用popToRootViewControllerAnimated: 返回根目录,或使用popToViewController:animated: 弹回任意先前的视图控制器。您也可以使用setViewControllers:animated: 直接设置整个视图控制器堆栈。

不过,请注意不要让您的用户感到困惑。

【讨论】:

非常感谢 Anomie,它非常有用!

以上是关于对 UINavigationController 的深入理解的主要内容,如果未能解决你的问题,请参考以下文章

IOS 传递对象对 UINavigationController 子的引用

UINavigationController:对所有弹出视图控制器的视图应用通用填充/边距

如何启动 UINavigationController 推送以响应对 UICollectionViewCell 的点击

iOS 7 UINavigationController 对开始/结束外观转换的不平衡调用

UINavigationController:willShowViewController 问题

iOS:禁用 UINavigationController