要从代码创建 2 个视图控制器之间的父/子关系,基本上只需执行以下操作:
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
其中self是父视图控制器。
但是,如果我想完全从 Interface Builder 中创建相同的关系怎么办?
或者换句话说:有没有办法使用 Interface Builder 重新创建方法 addChildViewController 的行为?
我没有找到很多关于此的文档,这里有一篇关于该主题的未解决的旧帖子:https ://devforums.apple.com/message/455758#455758
如果没有正确设置 addChildViewController 关系,任何旋转方法都不会转发到我的子视图控制器,这是我的问题的来源。
这是我在 IB 所做的:
- 将“视图控制器”对象从“对象库”面板拖放到“对象”面板中
- 在身份检查器中,我已将其类更改为我的 UIViewController 子类(“Items View Controller”)
- 将视图出口连接到控制器
- 将所有其他需要的插座连接到控制器(列表名称、表格视图)
图片中的第一个“视图”对象是我的父视图控制器的视图,而不是突出显示的“视图”是子视图控制器(“项目视图控制器”)的视图。
容器控制器还通过额外的 IBOutlet 保留其子实例:
@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController;
谢谢
更新 1:如果我在容器控制器的 viewDidLoad 中手动设置父/子关系,则所有旋转方法都会正确转发给子级。
[self addChildViewController:self.itemsViewController];
但我真的不知道这是否是正确的做法,因为我想用 IB 来做所有事情。
更新 2:感谢@micantox 提示在对象库中使用“容器视图”,我已将我的 xib 文件转换为情节提要,现在子视图控制器已添加到其父级,所以我不必使用 addChildViewController 从代码手动添加它,旋转方法按预期转发。
“容器视图”基本上实现了嵌入 segue,并且仅受 iOS 6 支持。
这是我的 Storyboard 的更新屏幕截图: