要从代码中创建两个视图控制器之间的父/子关系,基本上只需执行以下操作:
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
其中 self 是父视图控制器 但是,如果我想完全从Interface Builder创建相同的关系怎么办? 或者换句话说:有没有办法使用Interface Builder重新创建addChildViewController方法的行为? 我没有找到很多关于这方面的文档,这是一篇关于该主题的未解决的帖子:https://devforums.apple.com/message/455758#455758
如果没有正确设置addChildViewController关系,任何旋转方法都不会转发到我的子视图控制器,这里我的问题来自。
这就是我在IB中所做的:
图片中的第一个“View”对象是我的父视图控制器的视图,而突出显示的“View”是子视图控制器的视图(“Item View Controller”)。
容器控制器还通过另外的IBOutlet保留其子实例:
@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController;
由于
更新1:如果我在容器控制器的viewDidLoad中手动设置父/子关系,则所有旋转方法都会正确转发给子项。
[self addChildViewController:self.itemsViewController];
但我真的不知道这是否是正确的做法,因为我想用IB做所有事情。
更新2:感谢@micantox提示使用对象库中的“容器视图”,我已将我的xib文件转换为Storyboard,现在将子视图控制器添加到它的父级,所以我不必使用addChildViewController从代码中手动添加它,并且旋转方法按预期转发。
“容器视图”基本上实现了嵌入segue ,仅受iOS 6支持
这是我的故事板中的更新截图:
答案 0 :(得分:19)
为子视图控制器创建容器视图的正确方法是使用对象库中的“容器视图”对象。在View Controller的场景中拖动一个将为子视图控制器创建一个新场景,该场景可以与父视图控制器分开管理。
答案 1 :(得分:2)
此外,如果您正在尝试为故事板中的现有视图控制器创建嵌入segue,请从容器视图(而不是容器VC)控制拖动到要嵌入的VC。
答案 2 :(得分:0)
一种非常简单的方法是通过引用其故事板ID来实例化子视图控制器:
UITableViewController *childViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"childViewController"];
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
这样,您可以在界面构建器中构建两个视图控制器。您可以在界面构建器中设置故事板ID:选择视图控制器,您将在身份检查器中看到它的字段。