2012-10-24 41 views
2

我得到了一個parentViewController。添加childViewController到底是什麼?

parentViewController有3個孩子。

AnnController, BobController, CharlieController

(未真名)

在任何時候僅一個這樣的控制器的視圖可能存在。轉換完成:

[self transitionFromViewController:fromController toViewController:toViewController duration:duration options:options animations:animations completion:^(BOOL finished) 

一切正常。

但是,添加Ann,Bob和Charlie作爲Parent的孩子有什麼意義?

起初我還以爲這是使viewWillAppear中和viewWillDisappear得到transitionFromViewController

過程中自動調用,但它無論如何叫的viewController是一個孩子或沒有。

當父母被叫時,可能會使viewWillAppear和viewWillDisappear被調用。但這很容易做到。

當然,只有實際在ParentController.view的視圖區域中的視圖纔會將其viewWillAppear和viewWillDisappear調用正確嗎?或者是?

那麼Ann,Bob和Charlie是父控制員的孩子的確如此事實呢?

在家長的viewWillAppear,它是否會通過它的所有孩子並調用他們的viewWillAppear當且僅當childController的視圖是層次結構的一部分?或者是什麼?

其實又有什麼

注意這樣的事實:我清楚地知道什麼瀏覽containtment平均值。我問到它究竟做了什麼?例如,其中一個答案表示它是輪流傳遞的。是。但它是否對所有的子視圖或只有其視圖位於parentViewController.view層次結構中的子視圖都這樣做?或者是什麼?

回答

2

短Anwwer: 添加childViewController允許您在一個視圖控制器事件重定向到已定義有孩子其他控制器。

龍答: addChildViewControlleriOS 5和後期。這是一個名爲「view controller containment」的功能。這背後的基本思想是,你可以將你的視圖控制器嵌入到你自己的其他視圖控制器中。它功能強大,因爲它允許您爲自己編寫自己的tabViewControllercustomNavigationController

關於View controller containment最主要的是它試圖確保所有包含的視圖控制器將獲得適當的消息。一個簡單的例子是當你旋轉你的設備,如果你沒有添加addChildViewController旋轉變化事件不會傳遞到你的視圖層次結構。

視圖控制器管理查看週期,如您提及的調用(viewWillAppear, viewWillDisappear),因此它是一個不同的故事。

看看官方的doc,以瞭解自定義容器控制器的功能。

+0

我很清楚視圖包含的含義。我問到它究竟做了什麼? –

+0

你的意思是viewWillAppear與childViewController無關嗎? –

+0

爲什麼這會相關? – tiguero