iOS系列 基础篇 05 视图鼻祖 - UIView
目录:
在Cocoa和Cocoa Touch框架中,“根”类时NSObject类。同样,在UIKit框架中,也存在一个神奇的类——UIView。
从继承关系上看,UIView是所有视图的根,我们形象地称其为“始祖”。
本篇,咱们就一起研究UIView的神奇所在。
1. UIView“家族”
UIView“家族”大体分为“控件”和“视图”两类,二者均继承于UIView。
UIView类的继承层次如图:
UIControl类是控件类,其子类有UIButton、UITextField和UISilder等。之所以称它们为“控件类”,是因为它们都有能力响应一些高级事件。
为了查看这些事件,我们可以在Interface Builder中拖拽一个UIButton控件到设计界面,然后选中这个Button,单击右上角的按钮,打开连接检查器,如图:
其中Sent Events栏中的内容就是UIButton相对应的高级事件。UIControl类以外的视图没有这些高级事件,这可以借助HelloWorld工程中的Label控件验证一下。
选中UILabel控件,打开连接检查器,如图,可以发现UILabel的连接检查器中没有Sent Events栏,即没有高级事件,不可以响应高级事件。
事实上,视图也可以响应事件,但这些事件比较低级,需要开发人员自己处理。很多手势的开发都以这些低级事件为基础。
2. 应用界面的构建层次
iOS应用界面是由若干个视图构建而成的,这些视图对象采用树形构建。
如图所示是一个应用界面的构建层次图:
该应用又一个UIWindow,其中包含一个UIView根视图。
根视图下又有三个子视图:Button1、Button2和UIView(View2),其中子视图UIView(View2)中存在一个按钮Button3。
一般情况下,应用中智包含一个UIWindow。从视图构建层次上讲,UIWindow包含了一个根视图UIView。
根视图一般也只有一个,放于UIWindow中。根视图的类型决定了应用程序的类型。
上图中各对象之间的关系如下:
应用界面的构建层次是一种树形结构,UIWindow是“树根”,根视图是“树干”,其它对象为树冠。在层次结构中,上下两个视图是“父子关系”。
除了UIWindow,每个视图的父视图有且只有一个,子视图可以有多个。
它们之间的关系设计三个属性,如下:
下面简要介绍这三个属性的含义:
- superview:获得父视图对象。
- subviews:获得子视图对象集合。
- window:获得视图所在的UIWindow对象。
3. 视图分类
为了便于开发,苹果将UIKit框架中的视图分成以下几个类别:
- 控件:继承自UIControl类,能够响应用户的高级事件。
- 窗口:它是UIWindow对象,一个iOS应用只有一个UIWindow对象,它是所有子视图的“根”容器。
- 容器视图:它包括了UIScrollView、UIToolbar以及它们的子类。UIScrollView的子类有UITextView、UITabView和UICollectionView,在内容超出屏幕时,它们可以提供水平或垂直滚动条。UIToolbar是非常特殊的容器,它能够包含其他控件,一般置于屏幕底部,特殊情况下也可以置于屏幕顶部。
- 显示视图:用于显示信息,包括UIImageView、UILabel、UIProgressView和UIActivityIndicatorView等。
- 文本和Web视图:提供了能够显示多行文本的视图,包括UITextView和UIWebView,其中UITextView也属于容器视图,UIWebView是能够加载和显示HTML代码的视图。
- 导航视图:为用户提供从一个屏幕到另外一个屏幕的导航(或跳转)视图,它包括UITabBar和UINavigationBar。
- 警告框和操作表:用于给用户提供一种反馈或者与用户进行交互。UIAlertView视图是一个警告框,它会以动画形式弹出来;而UIActionSheet视图给用户提供可选的操作,它会从屏幕底部滑出。
注意:
我们以后会遇到很多视图(如UILabel、文本视图和进度条等)并未继承UIControl类,但我们也习惯称为“控件”,这是开发中约定俗称的一种常用归类方式,与严格意义上的概念性分类有差别。
4. 最后
没有结尾总觉得哪里怪怪的。。