在 ios 中添加视图控制器作为子视图

Posted

技术标签:

【中文标题】在 ios 中添加视图控制器作为子视图【英文标题】:adding view controller as child view in ios 【发布时间】:2014-12-01 05:47:36 【问题描述】:

您好,我正在尝试将view controller 添加为child view。然后删除此view controller 表单父视图。我为此目的使用以下代码。

 self.loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LOGIN"];
 [self.view addSubview:self.loginView.view];

此代码适用于ios8,但在iOS7 中此代码不起作用,它显示一半屏幕。显示一半登录。

有什么办法可以解决这个问题?

【问题讨论】:

【参考方案1】:

在您想要添加并显示您的子视图控制器的主视图(在 XIB 中)中添加一个自定义 UIView 对象。让contentView 是该视图的名称。使用以下代码添加子视图控制器:

self.loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LOGIN"];
[self addChildViewController:self.loginView];
[self.loginView.view setFrame:CGRectMake(0.0f, 0.0f, self.contentView.frame.size.width, self.contentView.frame.size.height)];
[self.contentView addSubview:self.loginView.view];
[self.loginView didMoveToParentViewController:self]; 

如果您不添加最后一行,您的子视图控制器将不会接收事件。通过使用此代码,您可以同时在父视图控制器和子视图控制器中接收事件。

【讨论】:

我有一个问题要问你们。如何在加载 childView 之前或之后将数据(字符串或 int)传递给子视图。谢谢你.. 我真的不明白你为什么要编辑帖子,这段代码是不可读的。您正在调用 UIViewController 视图,这会使代码非常混乱。我希望你在现实生活中不要这样编码。 我使用的名称与问题中提到的名称相同。我从不在现实生活中使用这些命名约定.. :)【参考方案2】:

UIViewController 添加为subView 不是标准编程我相信,UIViewController 旨在处理屏幕上的完整视图。与其将UIViewController 添加到您的UIView,不如创建一个自定义UIView,然后使用该UIView 来实现您想要的任何结果。

编辑:使用 XIB 创建自定义 UIView。

【讨论】:

我已经从故事板设计了视图,所以我为什么要添加视图控制器作为子视图 是的,但是您可以在 Xibs 中创建自定义视图,就像在 Storyboards 中一样。您只需将 UIView 类分配给 xib,然后创建该类的实例。

以上是关于在 ios 中添加视图控制器作为子视图的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 静态单元格作为子视图?

旋转iOS后子视图控制器高度为零

iOS - 将子视图添加到子视图控制器视图

如何在 iOS 中滑动 UIViewController 中包含的子视图控制器?

iOS - 在子视图的视图中添加一个按钮,但在顶视图的控制器上调用按钮的操作

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