[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
self 是父视图控制器。
但是,如果我想完全通过界面生成器创建相同的关系呢?
换句话说:是否有一种方法可以使用界面生成器重新创建 addChildViewController 方法的行为?我没有找到很多关于这方面的文档,这里是一个有关该主题的旧未解决帖子:https://devforums.apple.com/message/455758#455758
如果没有正确设置 addChildViewController 关系,则不会将任何旋转方法转发到我的子视图控制器,这就是我的问题所在。
这是我在 IB 中所做的:
- 从“对象库”面板中拖放“视图控制器”对象到“对象”面板中
- 在标识检查器中,我将其类更改为我的 UIViewController 子类(“Items View Controller”)
- 将 view outlet 连接到控制器
- 将所有其他必需的 outlets 连接到控制器(列表名称、表格视图)
图片中的第一个“View”对象是父视图控制器的视图,而突出显示的“View”是子视图控制器(“Item View Controller”)的视图。
容器控制器还通过一个额外的 IBOutlet 保留其子实例:
@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController;
谢谢
更新1:如果我在容器控制器的viewDidLoad中手动设置父子关系,所有旋转方法都会正确地转发到子视图。
[self addChildViewController:self.itemsViewController];
但是我不确定这是否是正确的方法,因为我想使用IB完成所有操作。
更新2: 感谢 @micantox 提供的提示,使用“容器视图”在对象库中,我已将我的xib文件转换为一个Storyboard,现在子视图控制器已经添加到其父视图控制器中,因此我不必手动使用addChildViewController从代码中添加它并且旋转方法按预期转发。
"容器视图"基本上实现了嵌入式转场,仅支持iOS 6及以上版本。
这是我的Storyboard的更新截图: