У меня есть следующие среды:Изменение UINavigationController суммируется с контроллерами отображения модальных
- вид корневой контроллер является UINavigationController
- ряд пользовательских UIViewControllers может быть в стек навигации
- каждого из пользовательских контроллеров может или может не отображаться контроллер модального представления
- Мне нужно иметь возможность программно управлять стекей навигации (например, удалить все контроллеры из стека навигации, кроме корневого контроллера, в качестве ответа на какое-либо внешнее событие как доставка толчка уведомление)
наивной реализация с [navigationController setViewControllers:newControllers animated:animated];
явно терпит неудачу, если был модальный контроллер представления, представленный любом из старых контроллеров индов стеки:
- Этого модальный контроллер остается видимой
- Если делегирование используется для родителя < -> коммуникация модальных контроллеров (родитель является делегатом представленного контроллера модального представления) любое действие в контроллере модального представления приводит к сбою, поскольку делегат уже выпущен
Таким образом, общая проблема заключается в том, что жизненный цикл модального контроллера не связан с родительским контроллером. Мои вопросы:
- Есть ли метод stardard для управления такой иерархией и безопасными изменениями в стеке навигации?
- Если НЕТ, чем была бы лучшая пользовательская реализация? Я вижу два общих подхода: один заключается в том, чтобы явно отклонить/отменить привязку всех модальных контрейлеров к коду, изменяющему стек навигации, а другой - добавить логику в консоль родительского представления для управления жизненным циклом модальных контроллеров напрямую.