在准备segue时,如何将数据传递给子UIViewController?

时间:2017-09-28 19:55:00

标签: ios uiviewcontroller segue

在iOS中的典型segue中,视图控制器A正在转向B,并覆盖prepare(for:sender:)中的A,将一些数据传递给B }。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let b = segue.destination as! ViewControllerB
    b.someData = ...

但如果B具有嵌入式子视图控制器,则此时将不会加载它。是否有推荐的方法将数据传递给嵌入式子视图控制器?

我可以在ViewControllerB上定义字段,然后让它通过viewDidLoad方法传递给孩子。 (此时,子视图控制器 存在于B的childViewControllers数组中。)但是,这对我来说似乎有点难看。

2 个答案:

答案 0 :(得分:0)

遵循OOP原则,特别是"抽象"。 ViewControllerA不应该知道ViewControllerB如何完成工作。如果ViewControllerB自己加载任何控件,那么它就是ViewControllerB的业务。 ViewControllerA的工作是为ViewControllerB提供完成工作所需的一切。 所以,是的,我使用viewDidLoad事件来加载childViewController。

答案 1 :(得分:0)

您可以在视图控制器B中使用方法,例如

public configureChildVC(data: Any) {
// in here set data to child vc
}

然后准备segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let b = segue.destination as! ViewControllerB
    b.configureChildVC(data: whatever)
}