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

hfo*_*sli 2 iphone xcode

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

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

我们很难依靠这些方法被触发或不被触发.

cdu*_*uhn 6

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

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