2009-10-03 2 views
4

У меня есть контроллер вида (A), который загружает контроллер вида (B) и использует его вид в моей иерархии представлений. Если я добавлю вид B в иерархию представлений A, и я не буду вручную пересылать события, такие как viewWillAppear, я не могу обработать их в контроллере B. (Из viewWillAppear: Документы)Каким образом можно добавить контроллер представления в иерархию представлений?

Предупреждения: Если вид, принадлежащий к контроллеру в виде добавляется к виду иерархии напрямую, контроллер вида не получит это сообщение . Если вы вставляете или добавляете вид в иерархию представления, и у него есть контроллер представления , вы должны отправить связанный с ним контроллер этого сообщения . Если вы не пришлите диспетчеру просмотра , это сообщение будет предотвратить отображение любой связанной анимации с .

Каков правильный способ гнездовых контроллеров просмотра? (Как это делает NavBarController.) Если речь идет только о необходимости перенаправления группы событий на вложенный контроллер, то каковы все события, которые мне нужно переслать?

ответ

4

Здесь нет волшебного решения. Правильное решение - это вручную отправлять эти сообщения.

ViewWillAppear:/viewDidAppear: and viewWillDisappear:/viewDidDisappear: сообщения - это единственные сообщения, которые необходимо отправить вручную на контроллер дочернего представления.

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

Кроме того, когда вы добавляете представление контроллера детского представления, вы должны отправить viewWillAppear:/viewDidAppear: сообщения, если view.window родителя не равно нулю. Когда вы удаляете представление, вы должны отправить viewWillDisappear:/viewDidDisappear: сообщения, если view.window родителя не равно нулю.

Смежные вопросы