3

这一直在我的脑海中,我真的不知道如何正确地将视图控制器管理的视图添加到另一个视图控制器的视图中。

这不起作用,因为视图没有完成加载

self.messageViewController = [[PopupMessagesViewController alloc] initWithNibName:@"PopupMessagesViewController" bundle:nil];
[self.view addSubview:self.messageViewController.view];

如何将视图控制器从笔尖创建的 UIView 添加到另一个视图控制器的视图?如何在添加之前强制加载此类视图?

4

3 回答 3

3

您需要创建一个容器视图控制器。虽然 iOS 5 明确支持容器控制器,但您可以在以前的版本中创建容器控制器。iOS 5 所做的只是自动转发旋转/外观事件(可选......而且我个人觉得它们很烦人,在我准备好之前发送事件)并为您提供一些额外的方法以在您的实现中使用。创建 Container View Controller 的真正问题是将所有适当的事件发送到子控制器,并确保您以与 Apple 实现一致的方式管理控制器。否则,您的子控制器会出现奇怪的行为。在执行此操作之前,您确实需要确保完全了解视图控制器是如何工作的。我建议阅读以下内容:

这里有一些信息链接:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html -向下滚动到:实现容器视图控制器

也在这里查看视图控制器生命周期,这将帮助您确定需要按哪个顺序进行哪些调用:http: //developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html# //apple_ref/doc/uid/TP40007457-CH10-SW1

我建议阅读整个视图控制器编程指南......你可以从那里获得很多信息:http: //developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#/ /apple_ref/doc/uid/TP40007457-CH1-SW1

于 2012-04-16T20:34:33.573 回答
2

一般来说,不要那样做。您打破了一些关于如何使用 UIViewControllers 的假设,这可能会在未来给您带来问题。您将无法指望子视图的控制器接收您可能期望的所有 UIViewController 生命周期方法调用。

有效的解决方案是使用 iOS 5 容器视图控制器方法将子视图的控制器添加为子视图控制器,或者如果您需要封装该行为,则让一个非 UIViewController 控制器类负责管理该子视图。

于 2012-04-16T20:20:06.897 回答
0

试试这个

- (void)viewWillAppear: (BOOL)animated {
    [super viewWillAppear: animated];
    [self.messageViewController viewWillAppear];
}

- (void)viewDidAppear: (BOOL)animated {
    [super viewDidAppear: animated];
    [self.messageViewController viewDidAppear];
}
于 2012-04-16T20:21:35.843 回答