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