对 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.这对任何人来说都非常令人困惑。
那么任何人都可以对此有明确的想法。
【问题讨论】:
“父母”是一个重载的术语。说到继承,父类和超类是一样的,所以UIView
是UIWindow
的父类或者超类。在谈论聚合或组合时,父类是其实例包含其他实例的类,例如包含其他视图的视图(或窗口)。在 Cocoa 中,对此的命名法是 superview(包含其他视图的视图)和 subview(包含在另一个视图中的视图)。两个定义都是正交的,彼此独立。
【参考方案1】:
不要将继承层次结构与视图层次结构混淆。
一个 UIView 实例可以有许多 UIView 类型的子视图,因此一个 UIWindow 是一个 UIView,因此它可以包含其他 UIView 作为子视图。
查看所有其他 UI 组件,例如 UIButton 或 UILabel,它们都继承自 UIView,因此您可以将它们作为子视图添加到您的视图中。
【讨论】:
以上是关于对 UIKit 视图层次结构感到困惑的主要内容,如果未能解决你的问题,请参考以下文章
对 uicontrol 的 nextresponder 感到困惑