2012-04-16 225 views
3

这一直是我的想法,我真的不知道如何正确添加由视图控制器管理的视图到另一个视图控制器的视图。iPhone如何将视图控制器的视图添加到另一个视图控制器的视图?

这是不行的,因为视图不完成加载

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

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

+0

什么方法你打电话的吗? viewDidLoad或init?如果你从init调用,self.view还没有创建。 – Kekoa 2012-04-16 20:31:52

回答

3

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

这里有一些链接信息:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html -Scroll下来:这里还为视图控制器生命周期中实现一个容器视图控制器

,这将帮助你找出哪些调用需要在作出何种顺序: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

2

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

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

+0

我很好奇,你能指点我什么假设? – Kekoa 2012-04-16 20:34:19

+0

@Kekoa当然,我试图在这里覆盖; http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers在iOS 5子视图控制器支持之前,所以它不会讨论这种替代方法,但除非您使用这些方法,否则我讨论的所有内容仍然适用。 – Jonah 2012-04-16 21:20:08

0

试试这个

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

- (void)viewDidAppear: (BOOL)animated { 
    [super viewDidAppear: animated]; 
    [self.messageViewController viewDidAppear]; 
} 
相关问题