2012-10-25 22 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有一個對其控制器的引用。除此之外,我在這方面的知識極限。 –