我一直试图弄清楚当使用 pushViewController:animatedpresentModalViewController:animated 和 UITabBarViewController 中的选项卡开关以及 UIAlertView 和 UIActionSheet 等方法时, View 层次结构中会发生什么。

(旁注:我这样做是因为我需要知道我创建的特定 UIView 是否在屏幕上可见,当我不知道它或其父 View 如何添加到 View 层次结构时。如果有人知道确定这一点的好方法,我欢迎知识。)

为了弄清楚,我一直在注销不同情况下 [[UIApplication sharedApplication] keyWindow] subview 的层次结构。以下是否正确:

  • 当一个新的 viewController 被推送到 UINavigationController 的堆栈上时,旧的 viewController 的 View 是 不再在 View 层次结构 中。即只有顶 View Controller 的 View 是UINavigationController View 的 subview (根据日志,实际上是UILayoutContainerView 等几个私有(private)类)。堆栈顶部 Controller 下方的 View Controller 的 View 实际上是否从窗口中删除了?
  • 当通过 presentModalViewController:animated 呈现一个新的 viewController 时,会发生非常相似的事情。新的 viewController 的 View 是 ,它是 kew 窗口 的唯一 subview 。这样对吗?
  • 最容易理解的事情: UIAlertView 创建自己的窗口并使其成为关键。
  • 我遇到的最奇怪的事情:UIActionSheet 通过 showInView: 方法显示,actionSheet 根本不在 View 层次结构中 。它不是作为参数传递给 showInView: 的 View 的 subview ,它不会作为关键窗口的 subview 添加,也不会创建自己的窗口。那它是怎么出现的呢?
  • 我还没有尝试过这个,所以我想知道当 UITabBarController 中的选项卡被切换时 keyWindow 层次结构中会发生什么。所选 UIViewController 的 View 是移到顶部,还是像 pushViewController:animatedpresentModalViewController: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 层次结构是程序员用来创建这种错觉的舞台布景/后台。不要混淆两者。

    所以:

  • 堆栈顶部 Controller 下方的 View Controller 的 View 实际上是否从窗口中删除了?是的。当 View Controller 从堆栈中弹出时,其 View 消失。为什么要浪费内存来保存用户可能永远不会再看到的 View ?
  • 新的viewController 的 View 是kew 窗口的唯一 subview 。这样对吗?是的。
  • ...a UIAlertView 创建自己的窗口并使其成为关键。是的。
  • ... actionSheet 根本不在 View 层次结构中。 ……那它是怎么出现的?它是由窗口上方的应用程序添加的。这就是它的特别之处。这也是 make 能够出现在所有其他 View 之上的原因,即使这些 View 失败。
  • 是不是将选中的 UIViewController 的 View 移到了顶部 是的。再次,舞台幻觉。您将一个 Controller View 换成另一个 Controller 的 View 。
  • 关于iphone - 使用 UIKit View 操作时,整体 View 层次结构如何变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2473837/

    10-16 04:38