【问题标题】:How to create a container/child viewcontroller relationship in interface builder如何在界面生成器中创建容器/子视图控制器关系
【发布时间】:2013-05-13 08:47:06
【问题描述】:

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

[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. 在身份检查器中,我已将其类更改为我的 UIViewController 子类(“Items View Controller”)
  3. 将视图出口连接到控制器
  4. 将所有其他所需的出口连接到控制器(列表名称、表格视图)

图片中的第一个“View”对象是我的父视图控制器的视图,而不是突出显示的“View”是子视图控制器(“Item View Controller”)的视图。

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

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

谢谢


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

[self addChildViewController:self.itemsViewController];

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


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

【问题讨论】:

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


    【解决方案1】:

    为子视图控制器创建容器视图的正确方法是使用对象库中的对象“容器视图”。在视图控制器的场景中拖动一个将为子视图控制器创建一个新场景,该场景可以与父视图控制器分开管理。

    【讨论】:

    • 据我所知,Container 视图控制器不仅限于 iPad,还可以在 iPhone link 上使用,我在不止一个应用程序中使用过它。在这种情况下,我想在 iPad 上执行此操作。
    • 无论如何,在界面构建器中的方法是通过对象库中的容器视图对象!这将让您分别管理您的子视图控制器的视图
    • 谢谢,我不知道这个对象的存在,实际上我正在使用单个 xib 文件而不是情节提要,而且它似乎只能在情节提要上使用。我去试试……
    • Storyboard + Container View 对象解决了我的问题!我已经更新了原来的答案。
    【解决方案2】:

    此外,如果您尝试为情节提要中的现有视图控制器创建嵌入 segue,请从容器视图(而不是容器 VC)按住 Control 并拖动到要嵌入的 VC。

    【讨论】:

      【解决方案3】:

      一种非常简单的方法是通过引用其故事板 ID 来实例化子视图控制器:

      UITableViewController *childViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"childViewController"];
      
      [self addChildViewController:childViewController];
      [self.view addSubview:childViewController.view];
      

      这样,您可以在界面构建器中构建两个视图控制器。您可以在界面生成器中设置故事板 ID:选择视图控制器,您将在身份检查器中看到它的字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多