调用addChildViewController后是否必须调用addSubview?

Ric*_*rdo 58 iphone interface-builder uiviewcontroller ios5

我正在尝试使用iOS5和新方法创建一个容器视图控制器addChildViewController.

打电话addSubview后我必须打电话addChildViewController吗?

在打电话removeFromSuperview之前我必须打电话removeChildViewController吗?

我在Apple文档中没有看到任何相关内容.你怎么看?

Pet*_*isu 84

1)调用addChildViewController后是否必须调用addSubview?

2)在调用removeChildViewController之前,我是否必须调用removeFromSuperview?

不完全的

你应该打电话removeFromParentViewController:而不是removeChildViewController: 你也应该打电话willMoveToParentViewController:

要添加/删除,您可以参考这个伟大的类别:

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

}
Run Code Online (Sandbox Code Playgroud)

developer.apple.com上的官方资源


mac*_*erv 42

简短回答:"是的,是的." 视图层次结构和视图控制器层次结构仍然是独立的.包含API简单地允许来自其他控制器的视图以干净和一致的方式在父控制器的视图中呈现自己.

您可以在Apple的文档中找到一点......这是"容器视图控制器安排其他视图控制器的内容"部分的相关段落:

容器管理视图层次结构,就像其他视图控制器一样.容器还可以将其任何子项的视图添加到其视图层次结构中.容器决定何时添加此类视图以及如何调整其大小以适合容器的视图层次结构,否则子视图控制器仍然负责视图及其子视图.

如果您有权访问,我强烈建议您查看WWDC 2011视频"实施UIViewController遏制"(在Safari中查看 | 在iTunes中查看).