子视图控制器的viewDidLoad在父视图控制器的之前被调用?

时间:2019-04-10 17:30:09

标签: ios uiviewcontroller

在情节提要中,我将ParentViewController设置为嵌入ChildViewController。我在两个viewDidLoad()方法中都运行了print语句,并且子视图控制器的视图在父视图之前加载。我无法在prepare(for:)中访问孩子的视图。

有人知道为什么要在父视图之前加载子视图吗?我认为,由于情节提要/ segues自动调用parentView.addSubview(childView),这意味着将首先加载父级的视图,因此我们可以调用addSubview

1 个答案:

答案 0 :(得分:2)

您忘记的是loadView()之前的生命周期方法viewDidLoad()loadView()负责视图和子视图的构造,如果使用此方法打印,则会发现父级的loadView()在子级之前被调用,这是因为必须先构造父级的视图才能添加子视图,例如子视图(您是正确的)。 loadView()也是建立亲子关系的地方(在父母的loadView()中),并且父母必须先让自己的孩子进入viewDidLoad(),然后才能进入viewDidLoad(),因为孩子的视图(实际上)是父视图。父级没有视图,从某种意义上说,它仅显示其子级的视图。因此,父级必须先让其子级进入viewDidLoad(),然后才能声明自己的视图已加载。