iPhone中视图和视图控制器

一、视图

视图是UIView类的实例,负责在屏幕上定义一个矩形区域。在iPhone的应用程序中,视图在展示用户界面及响应用户界面交互方面发挥关键作用。每个视图对象都要负责渲染视图矩形区域中的内容,并响应该区域中发生的触碰事件。这一双重行为意味着视图是应用程序与用户交互的重要机制。在一个基于模型-视图-控制器的应用程序中,视图对象明显属于视图部分。

除了显示内容和处理事件之外,视图还可以用于管理一或多个子视图。子视图是指嵌入到另一视图对象边框内部的视图对象,而被嵌入的视图则被称为父视图或超视图。视图的这种布局方式被称为视图层次,一个视图可以包含任意数量的子视图,通过为子视图添加子视图的方式,视图可以实现任意深度的嵌套。视图在视图层次中的组织方式决定了在屏幕上显示的内容,原因是子视图总是被显示在其父视图的上方;这个组织方法还决定了视图如何响应事件和变化。每个父视图都负责管理其直接的子视图,即根据需要调整它们的位置和尺寸,以及响应它们没有处理的事件。

由于视图对象是应用程序和用户交互的主要途径,所以需要在很多方面发挥作用,下面是其中的一小部分:

  • 描画和动画

    • 视图负责对其所属的矩形区域进行描画。

    • 某些视图属性变量可以以动画的形式过渡到新的值。

  • 布局和子视图管理

    • 视图管理着一个子视图列表。

    • 视图定义了自身相对于其父视图的尺寸调整行为。

    • 必要时,视图可以通过代码调整其子视图的尺寸和位置。

    • 视图可以将其坐标系统下的点转换为其它视图或窗口坐标系统下的点。

  • 事件处理

    • 视图可以接收触摸事件。

    • 视图是响应者链的参与者。

iPhone中视图的分类:

(1)显示数据的视图:包括UITextView(将文本段落呈现给用户并/或允许用户使用键盘输入自己的文本,可以选择是否将视图文本设置为可编辑)、UILabel(呈现短的只读文本视图)、UIImageView(显示图片,可通过UIImage对象加载它们)、UIWebView(显示HTML、PDF或其他高级Web内容)、MKMapView(向应用程序中嵌入地图,MK代表Map Kit)、UIScrollView(支持呈现比正常应用程序窗口大一些的内容);以上这些视图都直接继承自UIView。

(2) 做出选择的视图:UIAlertView(生成弹出窗口)、UIActionSheet(提供了从屏幕底部向上滚动的菜单);使用的一般规则是,当有大量的选项供用户选择时使用操作表单(UIActionSheet),当最多只展现两三个选项时使用警告视图(UIAlertView);两种展示方式都是模态的,要求用户在继续操作之前做出选择,因此最好在这些选择中提供取消选项;这两个视图也直接继承自UIView。

(3)控件:控件是将用户触摸转换为回调触发器的屏幕对象。包括UIButton(提供屏幕按钮,按下按钮可以触发回调函数,最常用的触发器是“touch up inside”,其中用户触摸的位置在按钮的内部,使用户能够通过在手指抬起前将手指滑离按钮,取消按下按钮的操作)、UISegmentedControl(提供了一行大小相等的按钮,一次只能选择一个按钮)、UISwitch(提供了一个简单的二进制控件)、UISlider(用户通过沿一个水平条滑动指示器就可以从一个指定范围内选择一个值)、UIPageControl(使用户能够在页面间移动,它提供一系列小圆点,展示当前页面并让用户导航到后面或前面的页面)、UITextField(允许用户输入文字且只能从用户处接受较短的文本项);以上这些控件直接继承自UIControl,而UIControl直接继承自UIView。

(4)表格和拾取器:UITableView(呈现一个滚动的选择列表)、UIPickerView(提供一种表格,用户可以通过滚动滚轮做出选择,该类的专门化版本是UIDatePicker,它带有预先加载的日期和时间特有的行为,广泛应用在日历和时钟应用程序中);UITableView直接继承自UIScrollView,UIPickerView直接继承自UIView。

(5)栏:iPhone提供了四种栏样式的视图。包括导航栏UINavigationBar(它出现在界面顶部,用来提供导航状态,是最常用的视图,一般不直接处理该类的实例,而是由UINavigationController实例生成和管理视图)、选项卡栏亦即标签栏UITabBar(在屏幕底部)、搜索栏UISearchBar(添加了一个基于文本的视图,要在表格顶端的导航栏中显示,如Contacts应用程序中使用的)、工具栏 UIToolBar(提供一个作用于当前视图的操作词汇表,放在屏幕底部);在处理导航栏时,通常会使用UITabBarController和UISearchDisplayController来完成工作,而不是直接构建和管理视图;在iPhone所有栏中,只有UIToolBar类可以直接使用,工具栏只限于使用临时性高亮样式;以上四种栏都是直接继承自UIView;想更多了解这四种栏在iPhone中的展示效果,请参考

http://hi.baidu.com/bunsman/blog/item/effd0aeae83bd8cad439c93d.html

(6)进度与活动:UIActivityIndicatorView(提供纺锤式的轮,在处理任务期间显示)、UIProgressView(提供一个从左向右逐渐填满的进度条,指示任务的进度情况);以上两个视图都直接继承自UIView。


二、控制器对象

控制器对象在一或多个视图对象和一或多个模型对象之间充当协调者或仲裁者。在模型-视图-控制器设计模式中,控制器对象(或简称为控制器)负责解释用户在视图对象中的动作和意图—例如用户敲击(点击)某个按键或者在文本框中输入文本,同时还负责将新的或发生变化的数据传递给模型对象。当模型对象发生变化—例如用户打开存放在文件系统的某份文档—控制器对象会将新模型数据传递给视图对象,这样视图对象才能显示新数据。综上所述,控制器可被当成一种管道。通过它,视图对象可以获悉模型对象的变化,反之亦然。控制器对象也可以启动或者协调应用程序任务、可以管理其他对象的生命周期。

Cocoa框架提供三种主要控制器类型:协调控制器(corrdinating controller) 、视图控制器(在iPhone OS系统上提供)以及中介控制器(mediating controller)(在Mac OS X系统上提供)。

image: Art/controller_object.jpg

1、协调控制器

协调控制器监督并管理整个应用程序的职能(或部分职能)。通常情况下,我们通过该控制器将特定于应用程序的逻辑嵌入到应用程序。协调控制器需要实现多种功能,包括如下:

  • 响应委托消息、监听通知

  • 响应动作消息(此类消息通常由按键这类控件于接收到用户敲击(点击)时发出)

  • 建立对象之间的关联,执行其他启动任务,例如应用程序启动时需执行的任务。

  • 管理所拥有对象的生命周期

协调控制器通常是NSObject的定制子类。在Mac OS X平台上,如果一个Cocoa 应用程序使用了文档架构,则协调控制通常是NSWindowControllerNSDocumentController对象。在iPhone OS应用程序中,视图控制器包含了协调控制器的角色。

2、视图控制器 (iPhone OS)

视图控制器管理一个全屏视图,它保存所管理视图的引用。视图可由视图控制器直接创建,也可能从Nib文件加载。在iPhone OS系统的用户接口设计模式中,视图控制器管理当前视图和下一个视图的展现,下一个视图会从右边滑入屏幕中。导航栏、标签栏以及二者的展现行为都由视图控制器实现并管理。视图控制器还可以显示模态视图,响应低内存警告,并在设备方向发生变化的时候旋转视图。

视图控制器是UIViewController子类的实例。UIKit 为您提供了数个不同用途的UIViewController的子类。

(1)UINavigationController:导航控制器,允许你在树状视图层次结构间上下导航,将工作移交给导航控制器,你可以将设计工作集中到创作具体的视图控制器界面上来,无需担心具体的导航细节,只要告诉导航控制器哪个视图移动到下一个即可。

(2)UITabBarController:选项卡栏亦即标签栏控制器,帮助用户选择调到哪个UIViewController,无需存在具体的导航层次。每个并行视图都是独立操作的,你构建位于每个选项卡上的视图控制器或导航控制器。选项卡栏实例一次提供5个以上的视图控制器选择时,用户可以通过More->Edit界面定制它们。More->Edit界面允许用户将喜爱的控制器向下拖动到屏幕底部的按钮栏,免费获得可编辑的选项卡。你需要做的就是通过customizeableViewController属性请求它们。

(3)UITableViewController:表格视图控制器,提供了一个标准的已连接UITableView实例并自动将委托和数据源设为指向自己,你只需要提供这些委托和数据源方法,用数据填充表格并响应用户单击即可。

(4) 地址簿控制器:地址簿用户界面框架(AddressBookUI.framework)提供了几个视图控制器,允许你从地址簿中选择某个人,查看他的详细信息并添加新联系人或修改现有联系人条目。这些视图控制器捆绑到基于C语言的ABAddressBook框架,该框架提供了查询和更新iPhone内置地址簿的函数。

(5)UIImagePickerController:此实用工具控制器允许用户从内置相册中选择图片或使用iPhone摄像头拍照或录视频。

(6)MFMailComposeViewController:允许你创建用户可以直接在程序中定制的邮件消息。MF前缀代表Message Framework(消息框架)。

(7)GKPeerPickerController:GameKit对等选取器为发现和连接其他iPhone提供了一个标准GUI。它提供了一个简洁的界面,列出了可用和可以连接的其他iPhone。其技术适用于文件传输、消息传递。

(8)Media Player控制器:Media Player框架提供了几个控制器,允许你选择和播放音乐和电影。MPMediaPickerController提供了一个媒体选择GUI,让用户选择音乐、播客和有声书。你可以选择使用哪个媒体,可以通过MPMusicPlayerController实例回放该媒体。用户需要看电影或听声音时,MPMoviePlayerController实例会完成这项任务,只需为其提供到媒体资源的路径并将控制器送到视图即可,控制器会为用户提供Done按钮或者在回放结束时自动返回委托调用。

您必须扩展视图-控制器框架类,这样才能协调模型和视图之间的数据。很多框架对象通常会将视图控制器作为委托或者数据源。

3、中介控制器(Mac OS X)

中介控制器促使数据在视图对象和模型对象之间流动。当用户改变视图对象中的某个值,中介控制器会自动地把 新的值传递给模型对象(用于保存数据的);当模型中某个属性值发生变化,中介控制器也确保视图对象显示更改过的值。中介控制器和其他类型的控制器对象不同,它具有高度的复用性。因此(也有其他原因),中介控制器成为Cocoa绑定技术的核心组件。您可以从Interface Builder库中拖出一个中介控制器,然后对其进行配置,建立它和视图对象及模型对象之间的关联。通常情况下,中介控制器是NSController类可实例化子类的对象。

总结:在iPhone应用程序中,视图和视图控制器紧密协作,管理若干方面的视图行为。视图控制器的作用是处理视图的装载与卸载、处理由于设备旋转导致的界面旋转,以及和用于构建复杂用户界面的高级导航对象进行交互。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值