Раскручивать делегата не означает "средний" вид
У меня есть навигационный контроллер (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 после получения выбранного значения из выбора пользователя (нажмите на строку).