这一直是我的想法,我真的不知道如何正确地将视图控制器管理的视图添加到另一个视图控制器的视图。
这不起作用,因为视图没有完成加载
self.messageViewController = [[PopupMessagesViewController alloc] initWithNibName:@"PopupMessagesViewController" bundle:nil];
[self.view addSubview:self.messageViewController.view];
如何将视图控制器从nib创建的UIView添加到另一个视图控制器的视图?如何在添加视图之前强制加载此视图?
答案 0 :(得分:3)
您需要创建一个容器视图控制器。虽然iOS 5明确支持容器控制器,但您可以在以前的版本中创建容器控制器。所有iOS 5都做了一些旋转/外观事件的自动转发(可选......我个人觉得它们很烦人,在我准备好之前发送事件)并给你一些额外的方法用于你的实现。创建Container View Controller的真正问题是将所有相应的事件发送到子控制器,并确保以与Apple实施一致的方式管理控制器。否则,您的子控制器会出现奇怪的行为。在执行此操作之前,您确实需要确保完全了解视图控制器的完整工作方式。我建议阅读以下内容:
以下是info的一些链接: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
我建议您阅读整个View Controller编程指南....您可以从那里获取大量信息:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457-CH1-SW1
答案 1 :(得分:2)
一般来说,不要这样做。你打破了一些关于如何使用UIViewControllers的假设,它可能会在将来引起你的问题。您无法依靠子视图的控制器接收您可能期望的所有UIViewController生命周期方法调用。
有效的解决方案是使用iOS 5容器视图控制器方法将子视图的控制器添加为子视图控制器,或者如果需要封装该行为,则将非UIViewController控制器类负责管理该子视图。
答案 2 :(得分:0)
试试这个
- (void)viewWillAppear: (BOOL)animated {
[super viewWillAppear: animated];
[self.messageViewController viewWillAppear];
}
- (void)viewDidAppear: (BOOL)animated {
[super viewDidAppear: animated];
[self.messageViewController viewDidAppear];
}