代码之家  ›  专栏  ›  技术社区  ›  hfossli

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

  •  2
  • hfossli  · 技术社区  · 16 年前

    使用UINavigationController将viewcontroller推入视图时:

    1. 是什么使它无法不触发viewDidAppear:和viewWillAppear:?

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   cduhn    15 年前

    当您调用pushViewC时,UINavigationController直接在正在被推送的控制器上调用这些方法ontroller:animated:类似地,UITabBarController在切换选项卡时直接调用这些方法,而UIViewController在使用presentModalViewC时调用这些方法ontroller:animated:. 当视图控制器的视图添加到窗口时,也会调用它们。我从未见过这些方法在这些特定的上下文中不能被调用。

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

        2
  •  0
  •   Matt    16 年前

    检查函数名是否完全正确,例如:

    - (void)viewWillAppear:(BOOL)animated
    

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

    这可能听起来很明显,但我犯了这个错误,因为原来的帖子没有代码示例,我想我应该与大家分享!