Вы должны иметь только 1 активный UIViewController в любое время. Любые подпредставления, которыми вы хотите манипулировать, должны быть именно такими - subVIEWS - т.е. UIView.
Я использую простую технику для управления своей иерархией представлений, и мне еще не приходилось сталкиваться с проблемой, так как я начал действовать таким образом. Есть 2 ключевых момента:
- один UIViewController должен использоваться для управления "стоимостью экрана"
вашего приложения
- используйте UINavigationController для смены видов
Что я подразумеваю под "достоинством экрана"? Это немного расплывчато, но обычно это функция или раздел вашего приложения. Если у вас есть несколько экранов с одним и тем же фоновым изображением, но с разными оверлеями / всплывающими окнами и т. Д., Это должен быть 1 контроллер представления и несколько дочерних представлений. Вы никогда не должны работать с двумя контроллерами представления. Обратите внимание, что вы все еще можете создать экземпляр UIView в одном контроллере представления и добавить его в качестве подпредставления другого контроллера представления, если вы хотите, чтобы определенные области экрана отображались в нескольких контроллерах представления.
Что касается UINavigationController - это ваш лучший друг! Отключите панель навигации и укажите «Нет» для анимации, и у вас есть отличный способ переключения экранов по требованию. Вы можете выдвигать и выдвигать контроллеры представления, если они находятся в иерархии, или вы можете подготовить массив контроллеров представления (включая массив, содержащий один VC) и установить его в качестве стека представления, используя setViewControllers. Это дает вам полную свободу менять виртуальные каналы, в то же время получая все преимущества работы в рамках ожидаемой модели Apple и обеспечения надлежащего запуска всех событий и т. Д.
Вот что я делаю каждый раз, когда запускаю приложение:
- запуск из оконного приложения
- добавить UINavigationController в качестве rootViewController окна
- добавить все, что я хочу, чтобы мой первый UIViewController был rootViewController для nav
Контроллер * * тысяча двадцать-два
(примечание, начинающееся с окон, это просто личное предпочтение - мне нравится создавать вещи самостоятельно, поэтому я точно знаю, как они создаются. Это должно хорошо работать с шаблоном на основе представления)
Все события происходят правильно, и в основном жизнь хороша. Затем вы можете тратить все свое время на написание важных фрагментов вашего приложения, не беспокоясь о попытках вручную взломать иерархию представлений.