在另一个 UIViewController 中显示一个 UIViewController

Posted

技术标签:

【中文标题】在另一个 UIViewController 中显示一个 UIViewController【英文标题】:Displaying a UIViewController within another UIViewController 【发布时间】:2014-08-29 11:23:28 【问题描述】:

我正在开发一个应用程序,其中 UIViewController (firstViewController) 包含一些 UILabelsUIButtonUIView (子视图)。 UIView 应该显示包含一些层的 UIViewController (secondViewController)。我无法做到这一点。

我应该怎么做才能在 firstViewControllersubView 中显示 secondViewController em>?

【问题讨论】:

将第二个视图控制器作为 childViewController 添加到第一个 viewController 并将第二个视图控制器的视图添加为子视图。 【参考方案1】:

您应该使用 UIViewController 包含或父/子视图控制器。你可以阅读详情here。

最基本的版本是:

UIViewController *parentVC = ...
UIViewController *otherVC = ... // it's view will be added as subview

[parentVC addChildViewController:otherVC];
[parentVC.containerView addSubview:otherVC.view]; // containerView is a view where your child view controller should go
[otherVC didMoveToParentViewController:parentVC];

如果只添加其他视图控制器的视图作为子视图,子视图控制器将不会接收所有事件。例如,如果您使用此处建议的其他方法(仅将视图添加为子视图,仅此而已),您将不会收到 -viewDidAppear: 消息(和其他消息)发送到您的子视图控制器。

【讨论】:

【参考方案2】:

您可以通过在下面的视图中添加另一个视图控制器的视图作为子视图来做到这一点

SecondVC *aObjSecondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondVC"];
[self.view addSubview:aObjSecondVC.view]

【讨论】:

【参考方案3】:

您可以使用以下行添加它:

[self.subView addSubView:secondViewController.view];

【讨论】:

请注意,如果您这样做,您将不会收到 viewWillAppear:viewDidAppear: 事件。 UIViewController 不是设计为像这样添加的。我强烈建议不要使用这种方法。看看 MANIAK_dobrii 的答案,我认为它以正确的方式处理了这个问题。

以上是关于在另一个 UIViewController 中显示一个 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

在另一个中“嵌入” UIViewController

在另一个视图控制器中调用 uiviewcontroller 中的操作

在另一个视图控制器中添加视图控制器作为子视图

不能在另一个文件中使用函数

嵌入 UIViewController 比向 UIViewController 添加子视图更好(以编程方式)

使用 UIViewController 作为 TableView 单元格