一个正常的答案是,视图何时出现。
假设我有一个 UIViewController。让我们称之为vc。
说我想让vc控制一个视图。
所以我做 vc.view = controlledView;
我希望每次受控视图即将出现然后 [vc viewWillAppear] 将被调用。
它没有。
怎么了?
即使在我这样做之后也不会调用 viewDidLoad
[vc view]
从技术上讲,vc.view 已经加载
一个正常的答案是,视图何时出现。
假设我有一个 UIViewController。让我们称之为vc。
说我想让vc控制一个视图。
所以我做 vc.view = controlledView;
我希望每次受控视图即将出现然后 [vc viewWillAppear] 将被调用。
它没有。
怎么了?
即使在我这样做之后也不会调用 viewDidLoad
[vc view]
从技术上讲,vc.view 已经加载
如果您在任何其他文件中调用 viewWillAppear ,并且使用其他 View 实例,那么它将永远不会调用。
每次转到该视图时都会调用 viewWillAppear 方法,如果您离开它然后再次来或回来,它将再次调用。
请务必使用“超级”关键字作为。WillAppear 方法中的 [super viewWillAppear]。
根据文档
在接收者的视图即将添加到视图层次结构之前以及配置任何动画以显示视图之前调用此方法。您可以覆盖此方法以执行与显示视图相关的自定义任务。
viewWillAppear
正如名称本身所暗示的那样,当您的视图即将出现时,总是会调用它。
如果视图控制器由弹出框内的视图控制器呈现,则在呈现的控制器被解除后,不会在呈现的视图控制器上调用此方法。
视图控制器的生命周期是这样的:
当一个 viewcontroller 被分配和加载时, loadView 被调用然后 viewDidLoad 被调用。您可以在图像中看到整个流程。
参考这张图片
注意:此图像取自此答案
正确答案如下。
您是否将子 viewController 添加为父子视图控制器的子级。
viewWillAppear 只会被父视图控制器(顶部屏幕视图控制器)调用,除非另一个 viewController 被声明为子视图控制器。
然后 parentViewController 将传递 viewWillAppear 事件。