在 Xcode 内显示视图控制器的实例而不干扰当前层次结构

Displaying instances of view controllers within Xcode without disturbing the current hierarchy

我正在 Xcode 中生成一个用 swift 编写的应用程序,我已经达到了开发阶段,我需要能够实例化视图。理想情况下,我会更改程序的层次结构以包含 'Main' 或 'Parent' 视图,主视图将负责显示提供给它的视图。

实例化其他视图控制器并将实例传递给主视图将是我的目标,但是,我对 Xcode 和 swift 没有经验,我不确定如何包含一个主视图在不改变我的整个故事板层次结构的情况下查看。

这是一张图片,可以直观地描述当前结构。

目的是改变层次结构以包含主/父/主视图,该视图将是一个空的显示项,它将在需要时显示所有视图,理想情况下我会保留选项卡控制方法。

主要且最重要的是,视图将允许显示、关闭和刷新视图控制器的实例,而不会影响应用程序的其他方面。

代码在这里似乎无关紧要,因为我的观点由故事板处理。在这里对我真正有帮助的是对我如何处理新层次结构实例化的简要解释。

提前感谢您对此事的任何帮助

视图控制器可以作为一个或多个 child 视图控制器的自定义 parent 视图控制器,在其自己的视图界面中以任何需要的方式显示它们的视图。


您可以以任何需要的方式实例化视图控制器。如果你想从故事板中提取一个视图控制器实例(因为你已经在那里设计了它的视图),请调用:

https://developer.apple.com/documentation/uikit/uistoryboard/1616214-instantiateviewcontroller

故事板中的视图控制器需要有故事板 ID 字符串,以便您可以识别它。


以这种方式从情节提要中提取视图控制器后,要在您的界面中显示它的视图,您必须执行以下操作:

  1. parent调用https://developer.apple.com/documentation/uikit/uiviewcontroller/1621394-addchild

  2. parent 捕获视图控制器的 view 并将其作为 parent 自己视图的子视图粘贴到界面中。

  3. parent调用https://developer.apple.com/documentation/uikit/uiviewcontroller/1621405-didmove

这两个视图控制器现在处于合法的 parent-child 关系中,并且两个视图控制器都可以正常工作。他们甚至可以相互参考。

如果你想从界面中删除 child 视图控制器的视图,你必须反转舞蹈:

  1. parent 使用 nil 参数调用 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621381-willmove

  2. parent 从界面中移除 child 视图控制器的视图

  3. parent调用https://developer.apple.com/documentation/uikit/uiviewcontroller/1621425-removefromparent


请阅读主视图控制器文档页面上的“实现容器视图控制器”:

https://developer.apple.com/documentation/uikit/uiviewcontroller