Раскручивать делегата не означает "средний" вид

У меня есть навигационный контроллер (NC) и три ViewController (A, B, C) со следующим шаблоном навигации:

NC->A->B->C

Если я перейду от A к C ивернусь назад, то будут вызваны оба метода B и C deinit.

Если я использую Sewwind Segue, чтобы перейти от C к A, B deinit не будет вызван.

Непонятно почему - у меня в приложении другая похожая последовательность, и deinits вызывается независимо от операции "назад" или "размотка".

Любая идея, что может заставить B "остаться в живых" после операции раскрутки?

1 ответ

Нашел проблему. Проблема в этой строке, которую я имел в viewDidLoad:

definesPresentationContext = true

Из документов: Определяет, какое представление контроллера родительского представления должно быть представлено для презентаций типа UIModalPresentationCurrentContext. Если ни у какого контроллера представления предка не установлен этот флаг, тогда презентатор будет корневым контроллером представления.

В результате средний вид (то есть "B") становится корнем, если он не отклонен операцией "назад".

Чтобы окно поиска оставалось видимым в течение доли секунды в представлении C, я добавил searchController.active = false в режиме подготовки к просмотру вида B после получения выбранного значения из выбора пользователя (нажмите на строку).

Другие вопросы по тегам