将视图控制器推入导航控制器

Posted

技术标签:

【中文标题】将视图控制器推入导航控制器【英文标题】:Push View Controller into Navigation Controller 【发布时间】:2009-06-30 20:49:40 【问题描述】:

有时当我将 ViewController 推入导航控制器时, 视图控制器的 viewDidLoad() 方法没有被调用。 这导致我的应用程序崩溃。我将不胜感激。

我忘了提到我在将视图推送到导航控制器之前从笔尖加载视图。

谢谢, 莎拉

【问题讨论】:

【参考方案1】:

viewDidLoad 方法仅在第一次从 Nib 文件加载视图时调用。如果视图已经加载并且您再次推送视图,它将不会再次触发。 根据您要执行的操作,您可能需要改用 viewWillAppearviewDidAppear

【讨论】:

viewDidLoad 在 ViewController 被初始化时也会被调用,即使根本没有涉及 XIB。 viewDidLoad 在 loadView 之后立即调用,在第一次访问 .view 属性时调用。 loadView 的默认实现会加载一个 nib 文件(如果您在初始化视图控制器时提供了一个 nib 文件名),但您可以覆盖 loadView 以在代码中创建视图。【参考方案2】:

一旦视图被加载并添加到控制器的堆栈中,您将不会再看到它被调用。您需要将视图从堆栈中弹出并再次推送以查看它。您始终可以放心,每次返回视图时都会调用 viewWillAppear。这使您可以进行任何可能按顺序进行的内务管理(我认为这是目标)。

【讨论】:

这是不正确的——viewDidLoad 只被调用一次(除非视图稍后被释放以释放内存)。 Diedrik Hoogenboom 说得对。 这正是我写的。我说它被调用一次,当你循环回到视图时,你需要实现 viewWillAppear 来做事情。请阅读帖子。

以上是关于将视图控制器推入导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

在推入导航控制器的控制器中添加子视图控制器

当视图控制器弹出或推入导航控制器堆栈时如何获得通知

将相同的视图控制器推入堆栈有奇怪的行为

单击按钮导航到根视图控制器

推入导航堆栈时隐藏 TabBar 并在弹出导航堆栈时将其返回

如何从导航堆栈中的任何位置弹出到任意视图控制器