Каково влияние нового жесткого диска на iOS 7 на жизненный цикл контроллера просмотра UINavigationController
?
Просмотр жизненного цикла контроллера при прокрутке по экрану от UINavigationController в iOS7
Ответ 1
Новое в iOS 7 - это жестом салфетки для пота в UINavigationController
; вы можете провести пальцем слева направо, чтобы сделать то, что обычно делается с помощью кнопки "Назад" . Вы должны следить за тем, что поп-переход отменяется.
Нажатие кнопки "Назад" по-прежнему работает так, как вы ожидаете:
- Пользователь удаляет кнопку "Назад"
-
viewWillDisappear
называется -
viewDidDisappear
называется - Выпущен контроллер с нажатой клавишей
Завершение прокрутки в щелчку, как нажатие кнопки назад
- Пользователь начинает прокручивать слева направо.
-
viewWillDisappear
называется - Пользователь выполняет жестов салфетки
-
viewDidDisappear
называется - Выпущен контроллер с нажатой клавишей
Отмененные салфетки для работы по-подобному
- Пользователь начинает прокручивать слева направо.
-
viewWillDisappear
называется - Пользователь прерывает жестов сабля (реверсив его или не перетягивая достаточно далеко вправо).
-
viewWillAppear
называется -
viewDidAppear
называется
Обновите свои ожидания и методы жизненного цикла вашего представления соответственно.
Следует отметить, что viewWillDisappear
вызывается во всех случаях, даже если пользователь отменяет позы. Это может оказаться ложью; если жестом салфетки поцелуя прерван, ваш взгляд не исчезнет, не так ли?
Как и все мы, я стараюсь балансировать вызовы addObserver/removeObserver
в моем приложении, чтобы предотвратить сбои. Я переопределяю методы жизненного цикла контроллера просмотра viewWillAppear/viewWillDisappear
для ведения домашнего хозяйства и поддерживаю флаг setupPerformed
, чтобы предотвратить добавление наблюдателей более одного раза во время жизни контроллера. Более того, я полагался на этот трюк, чтобы определить, будет ли диспетчер представлений собираться со стека контроллера навигации и впоследствии выпущен, чтобы я мог знать, когда именно оторвать моих наблюдателей.
iOS 7 усложнил этот шаблон. Я больше не могу полагаться на то, что контроллер вида срывается, когда вызывается viewWillDisappear
. Я должен ожидать, что он может обернуться, кричать "просто шутить" и снова позвонить viewWillAppear/viewDidAppear
.
Ответ 2
Отличная статья!
Как вы говорите, вы больше не можете использовать viewWillDisappear
и "трюк", как вы описали, но вместо этого это отлично работает для меня на iOS7 для захвата обратной кнопки.
- (void)viewDidDisappear:(BOOL)animated
{
if (self.isMovingFromParentViewController == YES) {
// Do the tidy up as before....
}
}
Надеюсь, это поможет кому-то.
Ответ 3
Моя ситуация была несколько иной. Я переопределяю popViewControllerAnimated в пользовательском классе navigationController. В popViewControllerAnimated я смог обнаружить, что поп произошел через drag, когда
self.interactivePopGestureRecognizer.state == UIGestureRecognizerStatePossible