没有合适的资源?快使用搜索试试~ 我知道了~
访问地址簿/联系人列表(标准版)
需积分: 9 15 下载量 122 浏览量
2013-06-28
09:57:02
上传
评论
收藏 796KB PDF 举报
温馨提示
试读
32页
该文章翻译自iOS in Practice 一书,资源来自Cocoachina。通过教你制作一个上架应用Dial4来学习访问地址簿/联系人列表(标准版)。
资源推荐
资源详情
资源评论
iOS in Practice CocoaChina 版主 bunzgame 翻译
内容仅供交流学习用,请勿用于商业用途,意见建议,或想加入我们请联系 QQ:2408167315
iOS inPractice 第二部分第四章
通过教你制作一个上架应用Dial4来访问地址簿/联系人列表
本章包括以下内容:
-主从表模板(Master-Detail applications)
-表视图(Table View)
-运用地址簿(address book)
在本章中,我们将会创建一个叫做Dial4的App,此App将会运用到iPhone的地址簿。虽然苹
果不允许App访问设备的所有信息(比如用户的电话号码),但有些在地址簿中的信息还是允
许访问甚至修改的。这个功能使得App能够显示地址簿中的联系人信息,甚至可以根据用户的
操作作修改。这个功能对很多App都有用,比如说带有根据地址寻找联系人功能的App,或直
接拨打联系人电话功能的App。
iOS SDK提供给开发者现成的地址簿UI,其中显示了地址簿的相关内容,并且用户可以直接选
择这些内容。虽然这很方便,但对于内容展示方面还是存在一定的限制。介于这个原因,在创
建Dial4这个App的时候,你将允许用户直接浏览并查看联系人列表,并把允许的用户联系人信
息直接显示在表视图里。这样你就避免了显示一些禁止的内容,比如这些联系人的电子邮箱地
址。用表视图显示的另一个优点则是方便用户筛选内容。
在使用地址簿框架(framework)的时候,指针的管理需要注意。使用一个从数组(array)
里面来的地址簿记录时,objc_unretainedPointer将会在未传送存储空间所有权(ownership
of the memory)的情况下被调用。有时,__bridge_transfer被用来进行对指针的类型强制转
换(typecast)以实现对Objective-C的兼容性。
现在我们就要创建这个叫做Dial4的App了。还在用着老式电话的时候,我喜欢只要拨出电话四
位尾数就能自动拨号的功能。这样我只需要记住一堆四位数,就可以很快拨打我朋友和家人的
号码了。Dial4将会通过显示联系人列表,并且根据打上去的数字对联系人进行筛选来重现这项
功能。不管是四位尾数、地域编码还是什么别的,都能用来筛选列表,而且只显示符合要求的
记录。这项了不起的技术也可以应用在其他App上。
4.1 创建带有表视图的主从表模板
用View Controller来展示一个view(视图)是非常方便的,甚至还能展示其他view来让用户
进行操作。但是当用来展示层次(hierarchy)的时候,还是使用navigation controller更方便。
iOS in Practice CocoaChina 版主 bunzgame 翻译
内容仅供交流学习用,请勿用于商业用途,意见建议,或想加入我们请联系 QQ:2408167315
在Dial4里面,我们将从表视图中选择一行,然后滑出一个新的view。如果你是个纯粹的iPhone
用户,你就会很熟悉这种表现方式。
表视图本身非常适合层次浏览(hierarchy navigation),对于一层层打开浏览并修改资料这
种用户互动方式来说,表视图是最适合不过的了。浏览表视图中的列表不需要运用到什么其他
机制,这都是自动的。
我们将从新建工程这步开始。可以将其定为master-detail application模版,这样就会有一些
项目是默认设定好的。然后,我们就可以专注于如何操作表视图了。
技巧14 创建主从表样板
需要在工程中用表视图的方式显示地址簿中的联系人。点击列表中的其中一项将会使另外一个
view controller和其附带的view从右侧滑出。这种层次浏览方式是使用navigation controller
来操作的。
问题
要创建一个显示内容的表视图以供浏览,需要选择合适的工程类型。所以现在请在Xcode里的
工程类型中选择Master-Detail Application模版。
使用navigation UINAVIGATIONCONTROLLER(从 苹 果 官 方说 明 文 档 中 摘 抄 )
controller来对层次数据的展示进行管理。一个navigation controller管理自身的view的
层次关系(也叫做navigation interface),这包括了一部分由navigation controller本
身直接管理的view和一些你自己设定的view controller。设定的view controller负责显
示各个页面的资料,而navigation controller则负责管理这些页面的跳转。
解决方案
我们将使用navigation controller作为最底层的view controller。
讨论
请在Xcode里的工程类型中选择Master-Detail Application模版。然后点击Next,将产品名
定为Dial4,选择the other settings,点击Next,然后设定所在地。打开工程Resources文件
夹下的Dial4MasterViewController.xib文件,我们就会看到一个表视图出现了(图4.1)。
iOS in Practice CocoaChina 版主 bunzgame 翻译
内容仅供交流学习用,请勿用于商业用途,意见建议,或想加入我们请联系 QQ:2408167315
Master-Detail Application模版默认使用表视图 图4.1
其他解决方案
UIVIEWCONTROLLER(从苹果官方说明文档中摘抄) 在Model View Controller
(MVC)设计模板中,一个controller对象提供了可自定义的逻辑关系,比如连接view
和controller,连接App的有关数据到view等。在iOS App中,view controller对象就是
专门用来展示和管理view的。View controller对象继承了UIViewController类,而这个
类是在UIKit framework中定义的。
在第三章中,我们使用了 view controller 来制作屏幕从底部滑出的效果。对于那个工程来说
这种做法是可以的,因为其主要目的在于选择选项,浏览则相对次要。但在 Dial4 中,我们需
要让用户浏览表视图并且查看里面的数据。在这种情况下,navigation controller 就更加合适
了。
UITABBARCONTROLLER(从苹果官方说明文档中摘抄) 使用 tab bar controller
将会给 App 带来一种至多种的操作方式。一个 tab bar controller 管理自身的 view 的
层次关系(也叫做 tab bar interface),这包括了一部分由 tab bar controller 本身直
接管理的 view 和一些我们自己设定的 view controller。
另一种方式就是使用 tab bar application 模版。这个模版将会在屏幕下方创建一个 tab bar。
它可以含有多个按钮,每个都对应一个 controller 以及相应的 view。这种效果可以在 iPhone
自带的 iPod App 里面看到(图 4.2)。
iOS in Practice CocoaChina 版主 bunzgame 翻译
内容仅供交流学习用,请勿用于商业用途,意见建议,或想加入我们请联系 QQ:2408167315
图4.2 苹果在iPod App界面中使用了tab bar controller
如果没有这么多种数据需要展示,就没有必要使用tab bar controller。根据这次的情况,只需
要用到一个列表显示数据,在点击后能查看更详细的数据。在这种情况下,navigation
controller和table view controller是最佳选择。
即使没有navigation controller,你也可以照常显示表视图,但是你要如何展示表视图中的数
据呢?从屏幕下方滑出一个view看似是一种解决方法,但是这样做看起来会很别扭。使用tab
bar controller允许使用多个不同的controller,但这些controller之间并无多大关联,使得“浏
览”这一主要目的不够明确。
只有navigation controller和tab bar controller能够管理和容纳多个其他controller。他们都
允许用户以从下方滑出或从边上滑出的方式查看其他controller的view。
使用view controller和tab bar controller都太小题大作了,要实现点击表视图中的其中一项进
入另一个controller用不着那么复杂。
4.2 使用表视图展示数据
表视图本身并不起眼,如果直接运行工程只会看到一个空的表格。它不仅需要从别处获得可供
展示的数据,还需要另一个类来管理用户操作。表视图使用data source(数据源)来提供其
数据以及用delegate来对用户操作做反应。
iOS in Practice CocoaChina 版主 bunzgame 翻译
内容仅供交流学习用,请勿用于商业用途,意见建议,或想加入我们请联系 QQ:2408167315
表视图使用行或者单元格(cells)来纵向显示数据。每个单元格都能显示文字或图片,并且可
以让用户点击。当然有时候点击并没用,因为该数据可能仅供展示。你应该可以看到类似(>)
的标示来指定这个单元格是否允许点击并展示更多东西。
表视图的类UITableView处理包括卷动、高亮、选择等功能。哪些部分是需要工程指定的呢?
一般情况下只是需要展示的数据和当单元格被点击时需要作何反应。
在第二章中,我们在按钮上使用了delegate,你应该还记得delegate是对一个对象的操作进行
反应的吧(比如按钮被点击)。接下来的内容就和之前做的相似,但我们还是要看看表视图是
如何获取并展示数据的。
技巧14 在表视图中展示数据
表视图需要另外一个对象来为其提供供展示的数据。这个对象叫作datasource。它还需要一个
delegate来处理用户点击。根据需求,datasource和delegate可以是同一个对象。在大部分
情况下,我直接使用默认的view controller来作为datasource和delegate。如果你使用IB来创
建表视图, IB会自动自动将表视图、datasource和delegate的关系连接到table view
controller。
DATASOURCE datasource和delegate很相似。唯一的区别是与被联系的对象的关系。
如果说delegate是用来联系UI的,那么datasource就是用来联系数据的。一般被联系
的对象都是一个view、,比如表视图,随时与它的datasource联系并且获得需要展示
的数据。一个datasource,必须像delegate一样作为一个协议(protocol)被 implement。
至少这个协议中需要用到的方法必须被implement。Datasource负责管理向对象view
分配的内存。
问题
我们要 确 认 默 认 的 表 视 图 是 否 已 经 设 定 了 相 应 的 datasource 和 delegate 。
Dial4MasterViewController或RootViewController都可以,选择哪一个取决于你。
解决方案
用Xcode打开默认XIB文件并查看设定是否正确。
讨论
从图上看来表视图与IB的连接已经建立了(图4.3)。而表视图的delegate和datasource都设
定为了File’s Owner。查看File’s Owner的时候,你会发现它其实是RootViewController
的实例(instance)。
剩余31页未读,继续阅读
资源评论
Cafe_ING
- 粉丝: 3
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功