2

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

谢谢。

4

1 回答 1

1

addChildViewController

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

您也可以通过以下方式从孩子那里参考父母self.parentViewController

苹果说addChildViewController

将给定的视图控制器添加为子视图。如果新的子视图控制器已经是容器视图控制器的子视图,则在添加之前将其从该容器中删除。此方法仅供自定义容器视图控制器的实现调用。如果你重写这个方法,你必须在你的实现中调用 super。

对于添加/删除,您可以参考这个伟大的类别而无需担心何时调用它:

UIViewController + 容器

- (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];

}
于 2013-04-20T21:26:19.680 回答