我一直试图弄清楚当使用 pushViewController:animated
、 presentModalViewController:animated
和 UITabBarViewController 中的选项卡开关以及 UIAlertView 和 UIActionSheet 等方法时, View 层次结构中会发生什么。
(旁注:我这样做是因为我需要知道我创建的特定 UIView 是否在屏幕上可见,当我不知道它或其父 View 如何添加到 View 层次结构时。如果有人知道确定这一点的好方法,我欢迎知识。)
为了弄清楚,我一直在注销不同情况下 [[UIApplication sharedApplication] keyWindow] subview 的层次结构。以下是否正确:
presentModalViewController:animated
呈现一个新的 viewController 时,会发生非常相似的事情。新的 viewController 的 View 是 ,它是 kew 窗口 的唯一 subview 。这样对吗? showInView:
方法显示,actionSheet 根本不在 View 层次结构中 。它不是作为参数传递给 showInView:
的 View 的 subview ,它不会作为关键窗口的 subview 添加,也不会创建自己的窗口。那它是怎么出现的呢? pushViewController:animated
和 presentModalViewController:animated
一样工作,其中只有显示的 View 位于窗口层次结构中? 最佳答案
我认为您在概念上混淆了 View 和 View Controller 。导航 Controller 和标签栏 Controller 管理器都是其他 View Controller 。两者都不管理 View 。
整个应用程序没有 View 层次结构,只有 View Controller 的层次结构。 View 层次结构仅在加载每个受控 View 时才存在。然后你有一个窗口-->viewController.view-->viewController.view.subviews 的临时层次结构。当您在堆栈上推送/弹出另一个 View Controller 时,您将获得另一个 View 层次结构。
View 层次结构是用户看到的舞台错觉。 View Controller 层次结构是程序员用来创建这种错觉的舞台布景/后台。不要混淆两者。
所以:
关于iphone - 使用 UIKit View 操作时,整体 View 层次结构如何变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2473837/