如何向容器中的视图控制器提供参数?

How to provide an argument to a view controller in containment?

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

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

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

我尝试了一些方法,但 none 有效:

let childVC = ChildViewController(someProperty: someProperty)

let childVC = ChildViewController()
childVC.someProperty = someProperty

这一行:

let childVC = ChildViewController()

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

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

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

如果你想让你的父视图控制器有一个子视图控制器,最简单的方法是在 IB 中的父视图控制器上放置一个容器视图。然后 control-drag 从那个容器视图到你想成为子视图的视图控制器,当出现提示时,select “embed segue” 作为你想要创建的 link 的类型。

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

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