2012-10-25 23 views
0

据我所知,viewWillAppear将被调用,当时视图即将出现。无论如何,viewWill/DidAppear/Disappear何时会被调用,它究竟如何工作?

但是IOS如何知道控制器的视图即将出现?

究竟该如何实施?

例如,childController.view是否首先检查该窗口是其超级祖先之一?该视图是否有指向其控制器的指针?究竟是如何工作的?每次添加视图时,都会检查它的窗口是否是超级祖先,以及它是否是UIViewController的视图插座?

例如,如果我添加childcontroller.view而不是任何被调用的视图的子视图。将viewWillAppear调用?

childController是否需要是parentController的子级,以便在自动调用parentController的viewWillAppear时调用childController的viewWillAppear?

回答

2

视图由控制器使用- (void)loadView方法加载。这个方法被实现来从一个笔尖/故事板加载一个空白视图或一个视图。如果您确实需要从头开始创建视图层次结构,则只需要覆盖它。

当第一次请求view属性的值并且控制器检测到值为nil时,会发生所有奇迹。所有的生命周期方法调用都由UIViewController处理。除了在需要的时候实施这些方法以外,没有什么需要做的了。请记住一件事:无法保证在调用- (void)viewDidLoad方法之前视图已被加载。

我所了解到的有关控制器如何工作的一切都来自View Controller Programming Guide

+0

够好。 +1。所以,当一个视图为零并且我们可以访问它时,控制器会调用loadView。让我想一会儿。如果观点不是零,那么呢?控制器如何知道视图正在消失?如果你从它的超级视图中删除视图,那么怎么办?控制器如何得到通知? –

+0

这就是我想要了解的。 UIView有一个指向它的控制器的弱指针吗?如果没有,UIViewController知道它的视图是如何添加的。 –

+0

如果您需要与此相关的更多信息,您应该在Apple论坛上提问。您还可以浏览头文件以查看有哪些漂亮的信息。 我记得在UIView.h文件中存在对UIViewController的引用;所以我假设UIView有一个对其控制器的引用。除此之外,我在这方面的知识极限。 –