2012-07-11 112 views
2

請說明一下,爲什麼我需要用addChildViewController:方法?
畢竟,當我把子視圖查看[some_obj.view addSubview:some_view],這些子視圖知道他的控制器。爲什麼需要使用'addChildViewController:'方法

謝謝。

+1

父控制器不知道新的ViewController是你剛剛添加了,所以它如何知道轉發生命週期事件和輪換等...... – 2012-07-11 10:51:03

+0

但是,正如在Apple [文檔]中說的那樣(http://developer.apple.com/library/ios/#documentation/EventHandling/概念/ EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_ chain.html#// apple_ref/doc/uid/TP40009541-CH4-SW2),如果視圖無法處理事件(響應鏈),則視圖會將事件傳遞到視圖的視圖控制器。 如果我在層次結構中查看視圖,可以將事件傳遞到視圖的視圖控制器。 – Lexandr 2013-04-04 10:28:38

+0

父控制器不知道新視圖控制器。例如。父控制器不知道它需要轉發它的生命週期事件,比如'viewDidLoad'等 – 2013-04-04 10:59:21

回答

1

addChildViewController

需要被調用,使父控制器需要持有其終生/後臺管理...這引用不能/不應該從UIView的,獲得子視圖控制器的引用添加時作爲一個子視圖

您也可以不是通過self.parentViewController

蘋果從孩子參考父說,大約addChildViewController

將給定的視圖控制器添加爲子視圖。如果新的子視圖控制器已經是容器視圖控制器的子控件,那麼在添加之前,該控件已從該容器中移除了 。此方法僅爲 ,旨在通過實施定製容器視圖控制器來調用。如果您重寫此方法,則必須在您的 實現中調用super。

對於添加/刪除,你可以參考這個偉大的類別和無後顧之憂的時候把它稱爲:

UIViewController + Container

- (void)containerAddChildViewController:(UIViewController *)childViewController { 

    [self addChildViewController:childViewController]; 
    [self.view addSubview:childViewController.view]; 
    [childViewController didMoveToParentViewController:self]; 

} 

- (void)containerRemoveChildViewController:(UIViewController *)childViewController { 

    [childViewController willMoveToParentViewController:nil]; 
    [childViewController.view removeFromSuperview]; 
    [childViewController removeFromParentViewController]; 

} 
相關問題