2015-06-24 4 views
2

Скажем, у меня есть стек 3-х контроллеров. Если я назову popToRootViewController на navigationController, контроллер верхнего уровня получает viewWillDisappear, но не на среднем контроллере. Что-то называется на среднем контроллере?Что происходит, когда вызывается popToRootViewController?

Обновление: Я попытался использовать dealloc за то, что мне было нужно, но выяснил, что VC освобождены от root + 1 до вершины, а не так, как вы думаете, что стек будет работать.

+1

Средний контроллер никогда не появляется при появлении в корне, и он не может исчезнуть, когда он никогда не появляется, поэтому вы не ожидали, что эти методы будут вызваны , Вероятно, его метод 'dealloc' будет вызван после того, как он будет всплывать. – dan

+0

Предполагается, что вызов 'viewWillDisappear' контроллера 2-го вида до того, как 3-й появится/нажат. Аналогично, если вы одновременно нажимаете несколько контроллеров представления, можно ожидать, что «средние» контроллеры не будут вызывать 'viewWillAppear' или' viewWillDisappear' до тех пор, пока навигационный стек не изменится соответствующим образом. –

+0

Да, я понимаю, что 'viewWillDisappear' не будет вызываться, потому что nav появляется прямо сверху до корня, но я бы подумал, что он уведомит диспетчера представлений, которые они собираются вытащить из стека. – doman412

ответ

1

При вызове popToRootViewController, в настоящее время видимый ViewController исчезает (после вызова viewWillDisappear) и первый контроллер в стек показано.
Все viewControllers между ними освобождены (после звонка dealloc) без отображения. И если они не показаны, они не могут исчезнуть.

TL; Используйте метод dealloc для обработки всего, что у вас есть. (и не забудьте сохранить какие-либо сильные ссылки на те viewControllers где-нибудь)

+1

Я пытался использовать 'dealloc', но он не вызывался в порядке сверху вниз, поэтому я не мог его использовать. Вместо этого я подклассифицировал 'UINavigationController', потому что у меня уже была настраиваемая панель навигации, и переопределить' popToRootViewController' для вызова методов протокола на VC в массиве, возвращаемом супер, в обратном порядке. это сработало – doman412

Смежные вопросы