Подтвердить что ты не робот

Просмотр жизненного цикла контроллера при прокрутке по экрану от UINavigationController в iOS7

Каково влияние нового жесткого диска на iOS 7 на жизненный цикл контроллера просмотра UINavigationController?

4b9b3361

Ответ 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