2017-01-26 1 views
0

Итак, у меня есть нормальный UINavigationController с его rootViewController, установленным в раскадровке. Всякий раз, когда я заменить навигационный контроллер (не спрашивайте почему, но некоторые переходы в моем приложении требуют всего стека должны быть заменено на новом контроллере) с помощьюSwift: rootViewController никогда не имеет своего представления [Will/Did] Disappear методы, называемые

var newController: UIViewController! 
// newController is initiated at some point 
... 
if let navigationController = self.navigationController { 
    navigationController.setViewControllers([newController]) 
} 

И я могу визуально видеть переход произойдет, но ни вызываются методы viewWillDisappear или viewDidDisappear. Когда я впоследствии заменяю стек навигационного контроллера, они вызываются, как ожидалось. Есть ли что-то особенное в корне, что мешает им быть вызванным?

+0

Я думаю, это потому, что при переключении корневого контроллера представления не исчезают. Попробуйте вызвать 'увольнение (анимированный: false)' на представлениях, от которых вы избавитесь. –

+0

Не является ли увольнением предназначенный для просмотра, который представлен модально? –

ответ

0

В основном контроллер навигации работает как стек контроллеров, где дочерние контроллеры идут сверху стека.

Если вы хотите удалить колоду контроллеров отображения навигационного контроллера, вы должны использовать метод поп на их основе:

navigationController?.popViewController(animated: true)

Это попы все из стека, и вы будете способный заменить корень другими контроллерами.

Этот другой ответ: How to detect if view controller is being popped of from the navigation controller? раскрывает различные параметры, которые вы должны обнаружить, когда ваш контроллер будет всплывать, например. использование isMovingFromParentViewController.

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