2015-07-02 3 views
0

Возможно ли, какие контроллеры представлений находятся в стеке навигации? Новые для Swift и iOS и просто хотят убедиться, что навигация происходит правильно, и диспетчеры просмотра не собираются непреднамеренно.iOS: программно видеть контроллеры просмотра в стеке навигации, если не использует UINavigationController?

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

Можете ли вы программно распечатать иерархию контроллера вида, если не используете UINavigationController?

ответ

2

UINavigationController имеет свои контроллеры представления в свойстве navigationController.viewControllers, которое представляет собой массив. Вы можете проверить это значение, чтобы увидеть стек навигации.

Вы также можете использовать отладчик иерархии представления Xcode для визуального просмотра всех видов в приложении в 3D.

Другой вариант заключается в использовании команды Facebook Chisel'spvc, которая печатает иерархию контроллера представления.

+0

Идеально, но есть ли способ программно распечатать иерархию представлений, если вы не используете UINavigationController? – Crashalot

+1

@Crashalot вы можете использовать Chisel Facebook https://github.com/facebook/chisel. У него есть команда 'pvc', которая печатает то, что вы хотите. – rounak

3

Возможно ли, какие контроллеры представлений находятся в стеке навигации? ... Можете ли вы программно распечатать иерархию представлений, если не используете UINavigationController?

Здесь вы говорите о двух совершенно разных вещах. Контроллеры просмотров и представления не являются одним и тем же объектом. Они оба имеют тенденцию использоваться в ориентированных графах таких объектов, как они, но графики этих двух видов объектов совершенно разные. То есть контроллер навигации является своего рода контроллером представления, который хранит список других контроллеров представлений, и (отдельно) представление хранит массив содержащихся в нем представлений. Наконец, большинство контроллеров просмотра управляют одним представлением, которое обычно содержит другие представления.

Простой способ увидеть иерархию представлений - установить контрольную точку на какой-либо строке в одном из ваших контроллеров представления и использовать отладчик для po [self.view recursiveDescription], который будет печатать (в отладчике) описание представления и подсмотров, которые который контролирует контроллер.

Еще более простой способ сделать это состоит в использовании изящного вида отладчика Xcode, который дает вам слоистый вид, что вы можете изучить в 3D:

layered view inspector

значок для этого инспектора выглядит как один прямоугольник на другой:

debug image hierarchy

вы можете, конечно, распечатать любой граф объектов, что ваш код может получить доступ, но из вашего комментария, это звучит, как вы должны будете написать метод сделать это. Если вы не используете навигационный контроллер, тогда нет «навигационного стека» для печати. Разумеется, вы можете реализовать свою собственную версию стека навигации, но тогда вам решать, как проверить ее.

+0

Извините, вы правы.Он должен сказать распечатать иерархию «диспетчера представлений», но спасибо за продуманное, подробное объяснение! – Crashalot

+1

* Задача * контроллера навигации состоит в том, чтобы * создать * иерархию диспетчера представлений, хотя * список * - лучший способ подумать об этом. Не имеет смысла спрашивать об отсутствии в списке списка, которое создает список. Если вы создаете какой-то график контроллеров представлений без контроллера навигации, это выходит за рамки того, что делает фреймворк, и вам нужно будет создать свой собственный способ его проверки. – Caleb

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