2016-10-13 5 views
1

Я пытаюсь выяснить разницу между движением левого края навигационного контроллера и обратным действием кнопки. У меня есть ошибка, которая возникает только тогда, когда вы перемещаетесь по левому краю. Если вы нажмете кнопку «Назад», она будет работать правильно. Ничто не настраивается, чтобы включить или отключить навигацию назад или навигацию по жестом.Различия между поведениями UINavigationController Left Edge Swipe и Back Button

Я нашел удивительно мало ресурсов по этой теме, и мне просто хотелось бы получить более полное представление о том, какие события вызваны каждым, и как они отличаются друг от друга.

+0

Нам потребуется гораздо больше деталей, чем только это. Что происходит именно так? Что вы видите в отличие от левого края и задней кнопки? Можете ли вы показать какой-то код, связанный с ошибкой (сформируйте оба связанных диспетчера представлений). –

+0

Одно из отличий заключается в том, что левый край - это интерактивный переход, например. пользователь может контролировать скорость и направление - перемещение назад и усилие, а также может отменять переход, а нажатие на кнопку возврата - нет. – almas

ответ

1

Неужели эта ошибка проявляется все время или она проявляется тогда и только тогда, когда вы начинаете прокручивать левый край и отменить его? Причина, по которой я спрашиваю, заключается в том, что мы использовали код, предполагающий, что viewWillAppear предыдущего VC и viewWillDisappear текущего будут всегда предшествовать viewDidAppear и viewDidDisappear соответственно. Но это уже не так с интерактивными переходами, потому что viewWillAppear/Disappear будет вызываться, когда вы начнете переход, но соответствующий viewDidAppear/Disappear не может быть, если интерактивный переход отменен. Фактически, при представлении этой концепции на WWDC 2013, ведущий шутил, что они должны переименовать viewWillAppear в «viewMightAppear, или viewWillProbablyAppear, или iReallyWishThisViewWouldAppear».

Итак, посмотрите на свои методы и убедитесь, что у вас ничего нет, что зависит от того, что на самом деле появляется и исчезает, потому что, если жест отменен, вы не увидите эти события.

Для получения дополнительной информации см. Видео WWDC 2013 Custom Transitions Using View Controllers. Интерактивные переходы обсуждаются чуть более чем наполовину через видео. В нем обсуждается, как реализовать свои собственные интерактивные переходы, но эти концепции применимы к встроенному левому краю навигационного контроллера.


В стандартном "назад" процесс кнопки, выскакивают из второго контроллера представления к первому, последовательность событий является типичным:

  • SecondViewController.viewWillDisappear
  • FirstViewController.viewWillAppear
  • SecondViewController.viewDidDisappear
  • FirstViewController.viewDidAppear

Но если вы начинаете левый край салфетки жест и пауза, последовательность событий:

  • SecondViewController.viewWillDisappear
  • FirstViewController.viewWillAppear

Но если остановить жест и отменить переход, вместо того, чтобы видеть SecondViewController.viewDidDisappear и FirstViewController.viewDidAppear, вы увидите следующие события:

  • FirstViewController.viewWillDisappear
  • FirstViewController.viewDidDisappear
  • SecondViewController.viewWillAppear
  • SecondViewController.viewDidAppear

В зависимости от того, что вы делаете в этих различных «появляются» родственных методов, вы можете иметь проблемы, если это не сделано правильно. Например, если вы делаете очистку в viewWillDisappear, убедитесь, что вы только очищаете вещи, которые вы установили в viewWillAppear. Или если вы делаете что-либо в viewDidAppear, убедитесь, что у вас не будет проблем, если этот метод будет вызван снова, если интерактивный переход будет отменен. Невозможно сказать, что именно не так в вашей ситуации, без информации о том, что вы делаете в этих связанных с явлениями методах.

Но суть в том, что вам просто нужно убедиться, что приложение не делает никаких предположений, что только потому, что начался переход, что он обязательно закончится.