Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)

1,通讯录访问介绍
通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息。要实现访问通讯录有如下两种方式:
(1) AddressBook.framework框架 : 没有界面,通过代码来获取所有联系人信息
(2) AddressBookUI.framework框架 : 通过系统提供的通讯录交互界面来访问(本文样例使用此方式)

2,联系人记录的属性
在一条联系人记录中,有很多属性,而这些属性又分为单值属性和多值属性。
单值属性是只有一个值的属性:如姓氏、名字、部门、备注等。
多值属性是包含多个值的集合类型,如:电话号码、Email、地址等。

3,多值属性标签的本地名称
在多值属性中包含了label(标签)、value(值)和ID等部分,其中标签和值都是可以重复的,而ID是不能重复的。
对于标签,我们可以使用ABAddressBookCopyLocalizedLabel()方法转为本地标签名(即能看得懂的标签名,比如work、home)。要不然打印出来的是_$!<Home>!$_,_$!<Work>!$_这样的数据。

4,使用通讯录交互界面样例
本文通过使用通讯录交互界面来访问联系人,并打印出选中联系人的姓名和所有电话。
(想使用代码获取联系人,或者想知道更多联系人属性如何读取可参考我另一篇文章“  Swift - 访问通讯录联系人(使用纯代码实现) ”)

5,效果图如下:
原文:Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)  原文:Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)

6,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import  UIKit
import  AddressBookUI
 
class  ViewController UIViewController  , ABPeoplePickerNavigationControllerDelegate {
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         // Do any additional setup after loading the view, typically from a nib.
         
         //弹出通讯录联系人选择界面
         var  picker =  ABPeoplePickerNavigationController ()
         picker.peoplePickerDelegate =  self
         self .presentViewController(picker, animated:  true ) { () ->  Void  in
             
         }
     }
     
     func  peoplePickerNavigationController(peoplePicker:  ABPeoplePickerNavigationController !,
         didSelectPerson person:  ABRecord !) {
         //获取姓
         var  lastName =  ABRecordCopyValue (person, kABPersonLastNameProperty).takeRetainedValue()
             as String
         println ( "选中人的姓:\(lastName)" )
         
         //获取名
         var  firstName =  ABRecordCopyValue (person, kABPersonFirstNameProperty).takeRetainedValue()
             as String
         println ( "选中人的名:\(firstName)" )
         
         //获取电话
         var  phoneValues: ABMutableMultiValueRef ? =
             ABRecordCopyValue (person, kABPersonPhoneProperty).takeRetainedValue()
         if  phoneValues !=  nil  {
             println ( "选中人电话:" )
             for  in  0 ..<  ABMultiValueGetCount (phoneValues){
 
                 // 获得标签名
                 var  phoneLabel =  ABMultiValueCopyLabelAtIndex (phoneValues, i).takeRetainedValue()
                     as  CFStringRef ;
                 // 转为本地标签名(能看得懂的标签名,比如work、home)
                 var  localizedPhoneLabel =  ABAddressBookCopyLocalizedLabel (phoneLabel)
                     .takeRetainedValue()  as String
                 
                 var  value =  ABMultiValueCopyValueAtIndex (phoneValues, i)
                 var  phone = value.takeRetainedValue()  as String
                 println ( "\(localizedPhoneLabel):\(phone)" )
             }
         }
     }
     
     func  peoplePickerNavigationController(peoplePicker:  ABPeoplePickerNavigationController !,
         didSelectPerson person:  ABRecord !, property:  ABPropertyID ,
         identifier:  ABMultiValueIdentifier ) {
         
     }
     
     //取消按钮点击
     func  peoplePickerNavigationControllerDidCancel(peoplePicker:  ABPeoplePickerNavigationController !) {
         //去除地址选择界面
         peoplePicker.dismissViewControllerAnimated( true , completion: { () ->  Void  in
             
         })
     }
     
     func  peoplePickerNavigationController(peoplePicker:  ABPeoplePickerNavigationController !,
         shouldContinueAfterSelectingPerson person:  ABRecord !) ->  Bool  {
         return  true
     }
     
     func  peoplePickerNavigationController(peoplePicker:  ABPeoplePickerNavigationController !,
         shouldContinueAfterSelectingPerson person:  ABRecord !, property:  ABPropertyID ,
         identifier:  ABMultiValueIdentifier ) ->  Bool  {
         return  true
     }
}

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_788.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值