对 UIKit 视图层次结构感到困惑

Posted

技术标签:

【中文标题】对 UIKit 视图层次结构感到困惑【英文标题】:Confused in UIKit view hierachy 【发布时间】:2011-04-16 08:48:13 【问题描述】:

我对 UIWIndow 的不寻常视图层次结构感到有些困惑。

如果有任何人参考了苹果 UIKit 的 UIWindow 参考,那么 UIView 就是 UIWindow 的超类

NSObject->UIResponder->UIView->UIWindow.

但是当一个人在 XCode 中创建一个新项目时,只有一个 MainWindows.xib,它包含项目中的其余视图。这意味着 UIWindow 是 UIView 的超类。所以 UIWindow 是子类和父类UIView.这对任何人来说都非常令人困惑。

那么任何人都可以对此有明确的想法。

【问题讨论】:

“父母”是一个重载的术语。说到继承,父类和超类是一样的,所以UIViewUIWindow的父类或者超类。在谈论聚合或组合时,父类是其实例包含其他实例的类,例如包含其他视图的视图(或窗口)。在 Cocoa 中,对此的命名法是 superview(包含其他视图的视图)和 subview(包含在另一个视图中的视图)。两个定义都是正交的,彼此独立。 【参考方案1】:

不要将继承层次结构与视图层次结构混淆。

一个 UIView 实例可以有许多 UIView 类型的子视图,因此一个 UIWindow 是一个 UIView,因此它可以包含其他 UIView 作为子视图。

查看所有其他 UI 组件,例如 UIButton 或 UILabel,它们都继承自 UIView,因此您可以将它们作为子视图添加到您的视图中。

【讨论】:

以上是关于对 UIKit 视图层次结构感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

为啥 contentView 在滚动视图中有 y 偏移

对 uicontrol 的 nextresponder 感到困惑

奇怪的 UIKit 错误,表格视图行保持选中状态

UIKit 状态保存不恢复滚动偏移

有啥方法可以从 Eclipse 的层次结构视图中隐藏测试类?

视图手势处理:检测大视图上的手势,大视图是小视图的子视图