Я пытался выяснить, что происходит в иерархии представлений, когда используются такие методы, как pushViewController:animated
, presentModalViewController:animated
и переключатели вкладок в UITabBarViewController, а также UIAlertView и UIActionSheet.
(Примечание: я делаю это, потому что мне нужно знать, виден ли конкретный UIView моего создания на экране, когда я ничего не знаю о том, как оно или его суперпредставление могли быть добавлены в иерархию представления. Если кто-то знает хороший способ определить это, я бы приветствовал знание.)
Чтобы понять это, я вышел из иерархии подпредставлений [[UIApplication sharedApplication] keyWindow] в различных обстоятельствах. Правильно ли следующее:
Когда новый viewController помещается в стек UINavigationController, старый вид viewController больше не равен в иерархии представлений . Таким образом, только представление контроллера верхнего представления является подпредставлением представления UINavigationController (согласно журналам это фактически несколько частных классов, таких как UILayoutContainerView). Виды контроллеров представления ниже верхнего контроллера стека фактически удалены из окна?
Очень похожая вещь происходит, когда новый viewController представлен через presentModalViewController:animated
. Новое представление viewController - единственное подпредставление окна kew . Это правильно?
Самое простое для понимания: UIAlertView создает свое собственное окно и делает его ключевым.
Самое странное, с чем я столкнулся: UIActionSheet отображается с помощью метода showInView:
, actionSheet вообще не находится в иерархии представлений . Это не подпредставление представления, переданного в качестве аргумента showInView:
, оно не добавляется в качестве подпредставления ключевого окна и не создает своего собственного окна. Как это выглядит, тогда?
Я еще не пробовал, поэтому я хотел бы знать, что происходит в иерархии keyWindow при переключении вкладок в UITabBarController. Вид выбранного UIViewController перемещен в верхнюю часть или он работает как с pushViewController:animated
и presentModalViewController:animated
, где только отображаемый вид находится в иерархии окон?