为什么需要使用'addChildViewController:'方法

时间:2012-07-11 08:50:33

标签: cocoa-touch

请解释一下,为什么我需要使用addChildViewController:方法?
毕竟,当我把子视图放到[some_obj.view addSubview:some_view]时,这些子视图知道他的控制器。

感谢。

1 个答案:

答案 0 :(得分:1)

addChildViewController

需要调用,因为父控制器需要持有对其子视图控制器的引用以进行生命周期/后台管理...当添加为子视图时,不能/不应该从UIView获取此引用

您也可以通过self.parentViewController

引导孩子的父母

Apple说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];

}