我一直试图弄清楚当使用 UITabBarViewController 中的 、 和选项卡开关以及 UIAlertView 和 UIActionSheet 等方法时,视图层次结构中会发生pushViewController:animated
什么presentModalViewController:animated
。
(旁注:我这样做是因为我需要知道我创建的特定 UIView 是否在屏幕上可见,而我不知道它或它的超级视图是如何添加到视图层次结构中的。如果有人知道确定这一点的好方法,我欢迎知识。)
为了弄清楚,我一直在注销不同情况下 [[UIApplication sharedApplication] keyWindow] 子视图的层次结构。以下是否正确:
当一个新的 viewController 被推入 UINavigationController 的堆栈时,旧的 viewController 的视图不再在视图层次结构中。也就是只有top view controller的view是UINavigationController的view的子view(根据日志,其实是UILayoutContainerView等几个私有类)。堆栈顶部控制器下方的视图控制器的视图是否实际上已从窗口中删除?
当一个新的 viewController 通过
presentModalViewController:animated
. 新的 viewController 的 view 是kew window 的唯一子视图。这个对吗?最容易理解的事情: UIAlertView 创建自己的窗口并使其成为关键。
我遇到的最奇怪的事情: UIActionSheet 通过
showInView:
方法显示,actionSheet根本不在视图层次结构中。它不是作为参数传递给的视图的子视图showInView:
,它没有作为关键窗口的子视图添加,也不会创建自己的窗口。那它是怎么出现的?我还没有尝试过,所以我想知道在切换 UITabBarController 中的选项卡时 keyWindow 层次结构中会发生什么。所选 UIViewController 的视图是否移动到顶部,或者它是否像
pushViewController:animated
and一样工作presentModalViewController:animated
,其中只有显示的视图位于窗口层次结构中?