Как правильно добавить контроллер представления в иерархию представлений? - PullRequest
6 голосов
/ 03 октября 2009

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

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

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

1 Ответ

5 голосов
/ 04 октября 2009

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

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

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

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

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