在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
数组中。)但是,这对我来说似乎有点难看。
答案 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)
}