视图是UIView类的实例,负责在屏幕上定义一个矩形区域。在iPhone的应用程序中,视图在展示用户界面及响应用户界面交互方面发挥关键作用。每个视图对象都要负责渲染视图矩形区域中的内容,并响应该区域中发生的触碰事件。这一双重行为意味着视图是应用程序与用户交互的重要机制。在一个基于模型-视图-控制器的应用程序中,视图对象明显属于视图部分。
除了显示内容和处理事件之外,视图还可以用于管理一或多个子视图。子视图是指嵌入到另一视图对象边框内部的视图对象,而被嵌入的视图则被称为父视图或超视图。视图的这种布局方式被称为视图层次,一个视图可以包含任意数量的子视图,通过为子视图添加子视图的方式,视图可以实现任意深度的嵌套。视图在视图层次中的组织方式决定了在屏幕上显示的内容,原因是子视图总是被显示在其父视图的上方;这个组织方法还决定了视图如何响应事件和变化。每个父视图都负责管理其直接的子视图,即根据需要调整它们的位置和尺寸,以及响应它们没有处理的事件。
由于视图对象是应用程序和用户交互的主要途径,所以需要在很多方面发挥作用,下面是其中的一小部分:
-
描画和动画
-
视图负责对其所属的矩形区域进行描画。
-
某些视图属性变量可以以动画的形式过渡到新的值。
-
-
布局和子视图管理
-
视图管理着一个子视图列表。
-
视图定义了自身相对于其父视图的尺寸调整行为。
-
必要时,视图可以通过代码调整其子视图的尺寸和位置。
-
视图可以将其坐标系统下的点转换为其它视图或窗口坐标系统下的点。
-
-
事件处理
-
视图可以接收触摸事件。
-
视图是响应者链的参与者。
-
在iPhone应用程序中,视图和视图控制器紧密协作,管理若干方面的视图行为。视图控制器的作用是处理视图的装载与卸载、处理由于设备旋转导致的界面旋转,以及和用于构建复杂用户界面的高级导航对象进行交互。
补:
控制器对象
控制器对象在一或多个视图对象和一或多个模型对象之间充当协调者或仲裁者。在模型-视图-控制器设计模式中,控制器对象(或简称为控制器 )负责解释用户在视图对象中的动作和意图—例如用户敲击(点击)某个按键或者在文本框中输入文本,同时还负责将新的或发生变化的数据传递给模型对象。当模型对象发生变化—例如用户打开存放在文件系统的某份文档—控制器对象会将新模型数据传递给视图对象,这样视图对象才能显示新数据。综上所述,控制器可被当成一种管道。通过它,视图对象可以获悉模型对象的变化,反之亦然。控制器对象也可以启动或者协调应用程序任务、可以管理其他对象的生命周期。Cocoa框架提供三种主要控制器类型:协调控制器(corrdinating controller) 、视图控制器(在iPhone OS系统上提供)以及中介控制器(mediating controller)(在Mac OS X系统上提供)。
![image: Art/controller_object.jpg](http://www.apple.com.cn/developer/iphone/library/documentation/General/Conceptual/DevPedia-CocoaCore/Art/controller_object.jpg)
协调控制器
协调控制器监督并管理整个应用程序的职能(或部分职能)。通常情况下,我们通过该控制器将特定于应用程序的逻辑嵌入到应用程序。协调控制器需要实现多种功能,包括如下:
-
响应委托消息、监听通知
-
响应动作消息(此类消息通常由按键这类控件于接收到用户敲击(点击)时发出)
-
建立对象之间的关联,执行其他启动任务,例如应用程序启动时需执行的任务。
-
管理所拥有对象的生命周期
协调控制器通常是NSObject
的定制子类。在Mac OS X平台上,如果一个Cocoa 应用程序使用了文档架构,则协调控制通常是NSWindowController
或NSDocumentController
对象。在iPhone OS应用程序中,视图控制器包含了协调控制器的角色。
视图控制器 (iPhone OS)
视图控制器管理一个全屏视图,它保存所管理视图的引用。视图可由视图控制器直接创建,也可能从Nib文件加载。在iPhone OS系统的用户接口设计模式中,视图控制器管理当前视图和下一个视图的展现,下一个视图会从右边滑入屏幕中。导航栏、标签栏以及二者的展现行为都由视图控制器实现并管理。视图控制器还可以显示模态视图,响应低内存警告,并在设备方向发生变化的时候旋转视图。
视图控制器是 UIViewController
子类的实例。UIKit 为您提供了数个不同用途的 UIViewController
的子类,UITableViewController
是其中之一。您必须扩展视图-控制器框架类,这样才能协调模型和视图之间的数据。很多框架对象通常会将视图控制器作为委托或者数据源。
中介控制器(Mac OS X)
中介控制器促使数据在视图对象和模型对象之间流动。当用户改变视图对象中的某个值,中介控制器会自动地把 新的值传递给模型对象(用于保存数据的);当模型中某个属性值发生变化,中介控制器也确保视图对象显示更改过的值。中介控制器和其他类型的控制器对象不同,它具有高度的复用性。因此(也有其他原因),中介控制器成为Cocoa绑定技术的核心组件。您可以从Interface Builder库中拖出一个中介控制器,然后对其进行配置,建立它和视图对象及模型对象之间的关联。通常情况下,中介控制器是NSController
类可实例化子类的对象。