在什么情况下viewWillAppear被调用?

问题描述:

正常答案是,当视图出现时。在什么情况下viewWillAppear被调用?

说我有一个UIViewController。我们称之为vc。

说我想vc来控制一个视图。

所以我做vc.view = controlledView;

我希望每当controlledView即将出现时,[vc viewWillAppear]将被调用。

它没有。

怎么了?

而且viewDidLoad中也没有叫我做

[vc view] 

技术上甚至后,vc.view已经被加载

+0

http://*.com/questions/7386333/guidelines-for-viewwillappear-viewdidappear-viewwilldisappear-viewdiddisappea – Balu

+0

如何加载该视图? – DivineDesert

+0

即使在我调用[vc view]之后,也不会调用viewDidLoad –

根据docs

此方法在接收器的视图之前调用即将添加 到视图层次结构中,并且在显示视图的任何动画配置为 之前。您可以覆盖此方法以执行与显示视图相关的自定义任务 。

+2

请注意,仅仅因为视图完全在屏幕外或覆盖范围内,“viewWillAppear”将不会被调用当视图“出现”不像其他答案建议,只有当它实际上被添加到视图层次结构 – Turch

+0

yes turch我同意... –

如果您在其他View实例中调用viewWillAppear,那么它将永远不会调用。

viewWill每次进入该视图时都会调用一个方法,如果您离开它,然后再来或回来,它会再次调用。

请务必使用'超级'关键字。在WillAppear方法中使用 [super viewWillAppear]。

+0

好的答案Mohit bhai –

viewWillAppear总是在您的视图即将出现时调用,如名称本身所示。

如果视图控制器由弹出窗口中的视图控制器呈现,则在呈现的控制器关闭后,不会在呈现视图控制器上调用此方法。视图控制器

生命周期是这样的:

当视图控制器被分配和加载,的loadView被称为然后viewDidLoad中被调用。您可以看到图像中的整个流程。

请参阅本图片enter image description here

注:此图片是从this answer

+0

不,它不是。通常情况下。但是,如果将控制器视图更改为其他内容,则不会调用它。控制器不会观察视图。 –

采取了正确的答案如下。

您是否将子viewController添加为父子视图控制器的子级?

viewWillAppear只会被调用父视图控制器(顶部屏幕视图控制器),除非其他viewController被声明为子。

然后parentViewController会传递viewWillAppear事件。