2012-07-11 147 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]; 

} 
相关问题