【问题标题】:In preparing for segue, how to pass data to a child UIViewController?在准备 segue 时,如何将数据传递给子 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 .

标签: ios uiviewcontroller segue


【解决方案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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2016-09-28
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多