pushViewController:animated
, presentModalViewController:animated
, UITabBarController
中的选项卡切换以及UIAlertView
和UIActionSheet
方法时,视图层次结构中会发生什么。另外,我正在做这个是因为我需要知道当我不知道它或它的超级视图可能如何添加到视图层次结构中时,我创建的特定UIView是否可见于屏幕上。如果有人知道一个好的方法来确定这一点,我会欢迎这方面的知识。为了找出答案,我已经记录下[[UIApplication sharedApplication] keyWindow]子视图在不同情况下的层级关系。以下几点是否正确:
当一个新的viewController被推入UINavigationController的堆栈时,旧的viewController的视图不再在视图层次结构中。也就是说,只有位于堆栈顶部的view controller的视图是UINavigationController视图的子视图(根据日志,实际上是几个私有类,比如UILayoutContainerView)。那么,堆栈顶部以下的view controller的视图是否真的被从窗口中移除了呢?
当通过
presentModalViewController:animated
呈现一个新的viewController时,新viewController的视图是kew window的唯一子视图。这个说法正确吗?最容易理解的情况:UIAlertView会创建它自己的窗口,并将其设为关键窗口。
我遇到的最奇怪的事情是:当通过
showInView:
方法显示UIActionSheet时,该actionSheet根本不在视图层次结构中。它不是传递给showInView:
方法的视图的子视图,也没有添加为关键窗口的子视图,也没有创建它自己的窗口。那么它是如何出现的呢?我还没有尝试过这个,所以我想知道当UITabBarController中的选项卡切换时,在keyWindow层次结构中会发生什么。被选中的UIViewController的视图是否移动到顶部,或者它是否像
pushViewController:animated
和presentModalViewController:animated
中那样,只有显示的视图在视图层次结构中?