如何在界面构建器中创建容器/子视图控制器关系

时间:2013-05-13 08:47:07

标签: uiviewcontroller interface-builder uistoryboardsegue container-view childviewcontroller

要从代码中创建两个视图控制器之间的父/子关系,基本上只需执行以下操作:

[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];

其中 self 是父视图控制器 但是,如果我想完全从Interface Builder创建相同的关系怎么办? 或者换句话说:有没有办法使用Interface Builder重新创建addChildViewController方法的行为? 我没有找到很多关于这方面的文档,这是一篇关于该主题的未解决的帖子:https://devforums.apple.com/message/455758#455758

如果没有正确设置addChildViewController关系,任何旋转方法都不会转发到我的子视图控制器,这里我的问题来自。

这就是我在IB中所做的:

  1. 将“视图控制器”对象从“对象库”面板拖放到“对象”面板
  2. 中 身份检查员中的
  3. 我已将其类更改为我的UIViewController子类(“Items View Controller”)
  4. 将视图插座连接到控制器
  5. 将所有其他所需的出口连接到控制器(列表名称,表格视图)
  6. 图片中的第一个“View”对象是我的父视图控制器的视图,而突出显示的“View”是子视图控制器的视图(“Item View Controller”)。

    enter image description here

    容器控制器还通过另外的IBOutlet保留其子实例:

    @property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController;
    

    由于


    更新1:如果我在容器控制器的viewDidLoad中手动设置父/子关系,则所有旋转方法都会正确转发给子项。

    [self addChildViewController:self.itemsViewController];
    

    但我真的不知道这是否是正确的做法,因为我想用IB做所有事情。


    更新2:感谢@micantox提示使用对象库中的“容器视图”,我已将我的xib文件转换为Storyboard,现在将子视图控制器添加到它的父级,所以我不必使用addChildViewController从代码中手动添加它,并且旋转方法按预期转发。
    “容器视图”基本上实现了嵌入segue ,仅受iOS 6支持 这是我的故事板中的更新截图:

    enter image description here

3 个答案:

答案 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:选择视图控制器,您将在身份检查器中看到它的字段。