【问题标题】:Displaying instances of view controllers within Xcode without disturbing the current hierarchy在 Xcode 中显示视图控制器的实例而不干扰当前层次结构
【发布时间】:2021-12-08 03:27:09
【问题描述】:

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

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

这是对当前结构进行直观描述的图像。

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

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

代码在这里似乎无关紧要,因为我的视图由情节提要处理。这里对我真正有帮助的一点是简要说明我如何处理新层次结构的实例化。

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

【问题讨论】:

    标签: ios swift xcode viewcontroller xcode-storyboard


    【解决方案1】:

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


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

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

    情节提要中的视图控制器需要有情节提要 ID 字符串,以便您识别它。


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

    1. 家长拨打https://developer.apple.com/documentation/uikit/uiviewcontroller/1621394-addchild

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

    3. 家长拨打https://developer.apple.com/documentation/uikit/uiviewcontroller/1621405-didmove

    这两个视图控制器现在处于合法的父子关系中,并且两个视图控制器都可以正常工作。他们甚至可以互相引用。

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

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

    2. 父级从界面中移除子视图控制器的视图

    3. 家长拨打https://developer.apple.com/documentation/uikit/uiviewcontroller/1621425-removefromparent


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

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

    【讨论】:

    • 感谢您的帮助。我将阅读您发送的链接,一旦我有,我就会将其标记为已解决。感谢您抽出宝贵时间回复
    • 关于这个的一个问题,容器视图在层次结构中的位置是什么?我的标签和导航栏是否不受影响。这些链接非常有用,谢谢您的解释
    • 我应该补充一点,如果我所描述的实际上是您想要做的事情,那么您想要做的事情是完全合法的。操作由子视图控制器拥有的子视图是绝对正确的,甚至可以将整个界面分成块,每个块都由自己的视图控制器管理。视图控制器应该且灵活,并且使用带有子视图控制器的父级可以促进这一点。
    • 我假设您现有的视图控制器之一 容器视图。 (你的问题不够具体,我无法假设其他任何事情——不是你的错,因为你不知道你试图想象的事物的术语)。如果你想用一个完全独立的主导视图控制器的视图覆盖整个界面,那就是全屏呈现(模态)视图控制器。
    • 目前,所有视图都是简单的视图控制器,最初通过 segue 和按钮导航。当我试图刷新一个视图时,我意识到我没有遵循一个好的设计模式来实现我需要实现的目标。在确保我的导航方法仍然有效的同时,我需要一个可以控制显示内容的视图。
    猜你喜欢
    • 2018-10-24
    • 2012-10-16
    • 2017-11-04
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2014-11-07
    相关资源
    最近更新 更多