在准备 segue 时,如何将数据传递给子 UIViewController?
Posted
技术标签:
【中文标题】在准备 segue 时,如何将数据传递给子 UIViewController?【英文标题】:In preparing for segue, how to pass data to a child UIViewController? 【发布时间】:2017-09-28 19:54:59 【问题描述】:在 ios 中的典型转场中,视图控制器 A
转场到 B
,我在 A
中覆盖 prepare(for:sender:)
,以将一些数据传递给 B
。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let b = segue.destination as! ViewControllerB
b.someData = ...
但是如果B
有一个嵌入的子视图控制器,此时它还不会被加载。是否有推荐的方法将数据传递给嵌入式子视图控制器?
我可以在ViewControllerB
上定义字段,然后让它在viewDidLoad
方法中将它们传递给孩子。 (此时,子视图控制器 出现在 B 的 childViewControllers
数组中。)但是,这对我来说似乎有点难看。
【问题讨论】:
孙子和祖父母与代表之间的直接沟通怎么样? 好吧,如果你有 A->B->C,并且你需要从 A->C 传递数据,你可以将它设置为 B,在 B 内部做同样的设置为 C . 【参考方案1】:遵循 OOP 原则,尤其是“抽象”。 ViewControllerA 不应该知道 ViewControllerB 如何完成这项工作。如果 ViewControllerB 自己加载任何控件,那么它就是 ViewControllerB 的事情。 ViewControllerA 的工作是为 ViewControllerB 提供完成工作所需的一切。 所以是的,我会使用 viewDidLoad 事件来加载 childViewController。
【讨论】:
【参考方案2】:你可以在视图控制器 B 中有一个方法,例如
public configureChildVC(data: Any)
// in here set data to child vc
然后准备转场
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let b = segue.destination as! ViewControllerB
b.configureChildVC(data: whatever)
【讨论】:
以上是关于在准备 segue 时,如何将数据传递给子 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章
在函数内将数据传递给 segue.destination 的问题