在情节提要中,我将ParentViewController设置为嵌入ChildViewController。我在两个viewDidLoad()
方法中都运行了print语句,并且子视图控制器的视图在父视图之前加载。我无法在prepare(for:)
中访问孩子的视图。
有人知道为什么要在父视图之前加载子视图吗?我认为,由于情节提要/ segues自动调用parentView.addSubview(childView)
,这意味着将首先加载父级的视图,因此我们可以调用addSubview
。
答案 0 :(得分:2)
您忘记的是loadView()
之前的生命周期方法viewDidLoad()
。 loadView()
负责视图和子视图的构造,如果使用此方法打印,则会发现父级的loadView()
在子级之前被调用,这是因为必须先构造父级的视图才能添加子视图,例如子视图(您是正确的)。 loadView()
也是建立亲子关系的地方(在父母的loadView()
中),并且父母必须先让自己的孩子进入viewDidLoad()
,然后才能进入viewDidLoad()
,因为孩子的视图是(实际上)是父视图。父级没有视图,从某种意义上说,它仅显示其子级的视图。因此,父级必须先让其子级进入viewDidLoad()
,然后才能声明自己的视图已加载。