使用UINavigationController推送viewcontroller有时会调用viewDidAppear:和viewWillAppear:

时间:2010-05-19 14:56:33

标签: iphone xcode

使用UINavigationController将视图控制器推入视图时:

  1. 触发它需要什么 viewDidAppear:和viewWillAppear:?
  2. 是什么让它无法触发viewDidAppear:和viewWillAppear:?
  3. 我们很难依靠这些方法被触发与否。

2 个答案:

答案 0 :(得分:6)

UINavigationController直接在调用pushViewController的控制器上调用这些方法:animated:同样,UITabBarController在切换标签时直接调用这些方法,UIViewController在使用presentModalViewController时调用它们:animated:。当视图控制器的视图添加到窗口时,它们也会被调用。我从未见过这些方法在这些特定情况下无法被调用。

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

答案 1 :(得分:0)

检查您的功能名称是否完全正确,例如:

- (void)viewWillAppear:(BOOL)animated

例如,如果您忘记声明动画参数,则不会调用您的函数。

这可能听起来很明显,但我犯了这个错误,因为原帖没有代码示例,我以为我会分享!