ViewDidLoad дочернего контроллера представления вызывается перед родительским контроллером представления? - PullRequest
0 голосов
/ 10 апреля 2019

В раскадровках я настраиваю ParentViewController для встраивания ChildViewController.Я запустил операторы печати в обоих их viewDidLoad() методах, и представление моего дочернего контроллера загружается перед родительским.У меня нет доступа к виду ребенка в prepare(for:).

Кто-нибудь знает, почему взгляд ребенка загружается раньше, чем взгляд родителя?Я думаю, поскольку раскадровки / сегменты автоматически вызывают parentView.addSubview(childView), что означает, что представление родителя загружается первым, поэтому мы можем вызвать addSubview.

1 Ответ

2 голосов
/ 10 апреля 2019

То, что вы забыли, это loadView(), метод жизненного цикла, который предшествует viewDidLoad(). loadView() отвечает за построение представления и подпредставления, и если вы напечатаете в этом методе, вы обнаружите, что родительский loadView() вызывается перед дочерним, и это потому, что представление родителя должно быть построено до того, как он может добавить подпредставления, например взгляд ребенка (вы правы). loadView() - это также место, где устанавливаются родительско-дочерние отношения (в loadView() родителя), и родитель должен получить своих потомков до viewDidLoad(), прежде чем перейти к viewDidLoad(), потому что для дочернего представления равно (в действительности) мнение родителей. Родитель не имеет представления, в некотором смысле он отображает только взгляды своих детей. Следовательно, родитель должен получить свои дочерние элементы до viewDidLoad(), прежде чем он сможет утверждать, что его собственное представление загрузилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...