Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone如何添加视图控制器';s视图到另一个视图控制器';你的观点是什么?_Iphone_Objective C_Ios_Uiview_Uiviewcontroller - Fatal编程技术网

iPhone如何添加视图控制器';s视图到另一个视图控制器';你的观点是什么?

iPhone如何添加视图控制器';s视图到另一个视图控制器';你的观点是什么?,iphone,objective-c,ios,uiview,uiviewcontroller,Iphone,Objective C,Ios,Uiview,Uiviewcontroller,这在我的脑海中已经存在很长时间了,我真的不知道如何正确地将一个由视图控制器管理的视图添加到另一个视图控制器的视图中 这不起作用,因为视图没有完成加载 self.messageViewController = [[PopupMessagesViewController alloc] initWithNibName:@"PopupMessagesViewController" bundle:nil]; [self.view addSubview:self.messageViewController.

这在我的脑海中已经存在很长时间了,我真的不知道如何正确地将一个由视图控制器管理的视图添加到另一个视图控制器的视图中

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

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

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

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

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

尝试此方法

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

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

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

以下是一些信息链接:-向下滚动至:实现容器视图控制器

这里还有视图控制器生命周期,它将帮助您确定哪些调用需要按哪个顺序进行:


我建议您阅读完整的View Controller编程指南……您可以从中获得很多信息:

您从什么方法调用它?viewDidLoad还是init?如果你从init打电话,self.view还没有创建。我很好奇,你能告诉我这打破了什么样的假设吗?@Kekoa当然,我试着在这里说明;这早于iOS 5子视图控制器支持,因此它不讨论作为替代方案,但除非您使用这些方法,否则我讨论的所有内容仍然适用。