【问题标题】:How to provide an argument to a view controller in containment?如何为容器中的视图控制器提供参数?
【发布时间】:2020-12-19 22:57:28
【问题描述】:

我正在尝试将参数传递给容器中的视图控制器:

let childVC = ChildViewController()
addChild(childVC)
childVC.view.frame = frame
view.addSubview(childVC.view)
childVC.didMove(toParent: self)

ChildViewController 有多个属性,其中一个必须从父视图控制器传递。

我尝试了一些方法,但都没有成功:

let childVC = ChildViewController(someProperty: someProperty)

let childVC = ChildViewController()
childVC.someProperty = someProperty

【问题讨论】:

    标签: ios swift uiviewcontroller containment


    【解决方案1】:

    这一行:

    let childVC = ChildViewController()

    几乎总是错的。这将创建一个空的 ChildViewController 实例,没有设置视图、出口或操作。

    通常您希望从 Storboard 或 nibfile 实例化视图控制器。

    如果您询问如何在子视图控制器的视图中安装内容,答案是“不要那样做”。

    如果你希望你的父视图控制器有一个子视图控制器,最简单的方法是在 IB 中的父视图控制器上放置一个容器视图。然后从该容器视图中按住 Control 并拖动到您想成为子视图的视图控制器上,并在出现提示时选择“嵌入 segue”作为您要创建的链接类型。

    这将导致系统在容器视图中安装子视图控制器并连接所有管道以使其工作

    父视图控制器的prepare(for:sender:) 方法将在子视图控制器被实例化之后,但在它的视图加载之前被调用。您可以在 prepare(for:sender:) 方法中添加代码以将值传递给子视图控制器(不是直接设置它的视图,而是设置属性或调用方法)

    【讨论】:

    • 如何以编程方式实例化它? storyboard?.instantiateViewController(withIdentifier: "ChildtVC") as! ChildViewController 似乎不起作用。使用 Storyboard 对我来说可能会有问题,因为我在父 VC 中以编程方式设置了所有内容。
    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2013-03-06
    • 1970-01-01
    • 2011-11-04
    • 2018-03-09
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多