在之前的博文当中 我们 已经创建了 几个iOS应用程序,在这些应用程序当中 我们 也创建了 不少用户界面了。我们 在没做什么解释的情况下 已经使用过了 视图 和 窗口。在向前 推进之前 我们 需要 清楚地 理解 iOS用户界面构建 与 管理背后的概念。
视图的概述
视图 属于 肉眼可见的物件。视图 可以用来组装、创建 iOS应用程序的用户界面。视图 本质上 是 屏幕上一个特定大小的特定矩形区域,从视觉上来说,这个区域内 与 这个区域外 不同;从用户交互的角度来说,这个区域内 与 这个区域外 也不同。所有的视图类型物件 都属于 UIView类型,比如 UILabel类型的物件(标签物件)、UIImageView类型的物件(图像视图),UIButton类型的物件(按钮物件) 和 UITextField类型的物件(文本框物件)等。
UIWindow这类物件
如果 你 曾经 为Windows 或者 Mac OS X这样的桌面操作系统 开发过 应用程序,那么 你 对窗口的概念 一定 很熟悉。典型的桌面应用程序 会包含 一个到多个窗口,各个窗口 都拥有 一个标题栏,而 标题栏上的按钮 允许 你 最小化、最大化 或者 关闭 窗口。在这样的语境中 窗口 在屏幕表面 提供了 一个区域,应用程序 可以在这个区域当中 向用户 展示 信息 以及 物件。
UIWindow这类物件 为iOS应用程序 提供了 类似的功能。各种视图物件 都可以显示 在窗口提供的区域内。然而 iOS应用程序的窗口 还是 有 一些不同的,iOS应用程序 只有 一个窗口,窗口 要占满 整个屏幕,并且 窗口 也没有标题栏、最大化、最小化 和 关闭按钮。
其实 UIWindow类型的物件 也属于 UIView类型,并且 在整个视图体系中 位于 最底层。用户 并不会看到 UIWindow类型的物件 或者 与 UIWindow类型的物件 进行 直接互动。UIWindow类型的物件 可以通过编写 代码 来创建,但是 一般 由界面创建器 自动 创建。
视图体系
iOS应用程序的用户界面 是 按照 一定的体系 构建出来的。UIWindow类型的物件 位于 这个体系的最底层,其它视图物件 依次 添加 到这个体系当中。在我们之前创建的单位换算应用程序当中 我们设计的用户界面 包含了 一个窗口、一个视图、一个文本框、一个按钮 和 一个标签。那么 这个用户界面的视图体系 就应该是 这样的:
这个视图体系中的UIWindow物件 是 UIView物件的主视图,而 UIView物件 则是 UIWindow物件的子视图。与之相似,UIButton物件、UILabel物件 和 UITextField物件 都是 UIView物件的子视图。一个子视图 只能拥有 一个直接的主视图。
根据我们肉眼的观察 子视图 总是 出现 在主视图的上方 而且 子视图 总是 位于 主视图边界以内。子视图的尺寸改变 总是 跟 主视图的尺寸改变 关联 在一起的。也就是说 主视图 有 能力 改变 子视图的位置 和 尺寸。
当用户 与 用户界面 交互时,视图体系 控制着 对事件的处理。视图体系 通过响应链条 来处理 用户触发的事件。比如 一个子视图 无法处理 它收到的事件,那么 它 就将 这项事件 传递 给它的主视图。如果 收到事件的主视图 也无法处理 该项事件,那么 它 就将 这项事件 传递 下一层主视图,直到 事件 得到 处理 为止。
视图类型
苹果 将 不同的视图 都包括 在UIKit框架当中 并且 分成了 几个不同的类别:
窗口
UIWindow类型的窗口物件 位于 视图体系的最底层。其它子视图 在UIWindow物件所提供的区域内 绘制 各自的内容。
容器视图
容器视图 可以用来扩展 其它视图物件的功能。UIScrollView(滚动视图)这类物件 为UITableView(列表视图)这类物件 和 UITextView(文本视图)这类物件 提供了 滚动条 和 滚动的功能。UIToolbar(工具条)这类物件 用来将 多个控件 组织 在单个视图当中。
控件
控件视图 除了 向用户 展示 信息之外 而且 还对用户的互动 进行响应。控件视图 都包含 在UIControl这类物件当中,而 UIControl这类物件本身 就包含 在UIView这类物件当中。控件视图 包含了 按钮、滑块 和 文本框等。
文本 和 网页视图
UITextView(文本视图) 和 UIWebView(网页视图)这两类物件 都为开发者 提供了 显示 格式化文本的机制。比如 UIWebView这类物件设计出来的目的 就是 像网页浏览器那样 显示 html内容的。
导航视图 和 标签栏
导航视图 和 标签栏 为开发者 提供了 在应用程序界面当中 导航的机制。它们 是 和 视图控制器 配合使用的,一般 用 界面创建器 创建。
对话框视图
对话框视图 包含了 UIAlertView 和 UIActionSheet这两类物件。这些物件 用来 向用户 提示 重要 或者 紧急的信息 并且 允许 用户 采取 措施。UIAlertView这类物件 是 蓝色的弹出式对话框。而 UIActionSheet这类物件 则是 从屏幕底部滑出的面板。