UIView中的UIViewController

nis*_*tcm 10 iphone uiviewcontroller uiview

我可以在另一个UIViewcontrller中的UIView中加载UiViewController.

假设UIViewControllerA有一个名为subuiview的UIView.我可以将UIViewControllerB加载到subbuiview中吗?

谢谢!

Jil*_*ouc 23

从iOS 5开始

iOS 5中添加了"容器视图控制器".您可以将视图控制器添加为另一个视图控制器的子视图addChildViewController:.
您还负责将其视图添加到其父视图中.

iOS SDK文档中记录了一切:实现自定义容器视图控制器.

要添加子视图控制器:

childViewController.frame = ...
[self.view addSubview:childViewController.view];
[self addChildViewController:childViewController];
[childViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

并删除它:

[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)

在iOS 5之前

可以加载另一个视图控制器并将其视图添加为另一个控制器视图的子视图.

UIViewController *subController = ...
[self.view addSubview:subController.view];
Run Code Online (Sandbox Code Playgroud)

虽然Apple的指南不推荐这样做:

您创建的每个自定义视图控制器对象都负责管理单个视图层次结构中的所有视图.[...]视图控制器与视图层次结构中的视图之间的一对一对应关系是关键设计考虑因素.您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分.

(来自View Controller编程指南)

你的子控制器将不会收到旋转的事件,或者viewWillAppear,viewWillDisappear等(除viewDidLoad).

因此,Apple建议我们使用单个视图控制器来管理整个视图层次结构(但不禁止使用多个视图层次结构).

每个视图可能仍然是UIView的自定义子类.也许你不需要另一个视图控制器,而是一个自定义视图.