推视图控制器使用的UINavigationController有时调用viewDidAppear:和viewWillAppear中:

问题描述:

推时使用的UINavigationController到视图一个视图控制器:推视图控制器使用的UINavigationController有时调用viewDidAppear:和viewWillAppear中:

  1. 什么是必要的它触发 viewDidAppear:和viewWillAppear中:?
  2. 是什么让它无法触发viewDidAppear:和viewWillAppear:?

我们很难依靠这些方法被触发与否。

+0

你会期望这是一样简单1:视图出现2:视图不出现:) – willcodejavaforfood 2010-05-19 15:44:50

+0

是的,我也会。 :)但我的眼睛和控制台不会撒谎。 – hfossli 2010-05-21 09:06:48

UINavigationController直接在调用pushViewController时被推入的控制器上调用这些方法:animated:类似地,UITabBarController在切换选项卡时直接调用这些方法,而UIViewController在使用presentModalViewController时调用它们:animated :.当视图控制器的视图添加到窗口时,它们也会被调用。我从来没有见过这些方法在这些特定的情况下无法被调用。

现在请记住,这些方法只会在控制器被推送或呈现在这些特定上下文中调用。例如,如果将视图控制器的视图添加为除UIWindow以外的某个视图的子视图,则不会调用这些方法。 Apple的文档指出,视图控制器仅用于全屏视图,通常使用上述方法之一来呈现视图控制器。可以忽略Apple的建议并将视图控制器与其他视图控制器的子视图相关联,但必须手动将从视图控制器的viewWill/DidAppear/Disappear调用委派给嵌套控制器。

+0

我在我的tabbar控制器中有3个选项卡。每个都有一个UITableView作为self.view。每个视图控制器都加载了initWithNibName。我发现viewDidAppear根本没有被调用。即使您点击了标签栏项目。即使我点击表格单元格切换视图。但是当我在一个视图中加载一个模式视图控制器时,在那之后viewdidappear的行为就像我们预期的那样。似乎第一个标签栏视图控制器必须卸载一次,然后开始工作。我无法找到任何其他解决方法。 – karim 2010-09-28 11:11:06

检查您是否已经有了函数名称完全正确,例如:

- (void)viewWillAppear:(BOOL)animated 

例如,如果你忘记申报动画参数,你的函数将不会被调用。

这听起来很明显,但我犯了这个错误,因为原来的文章没有代码示例,我想我会分享!