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

1,通讯录访问介绍

通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息。要实现访问通讯录有如下两种方式:

(1)AddressBook.framework框架 : 没有界面,通过代码来获取所有联系人信息

(2)AddressBookUI.framework框架 : 通过系统提供的通讯录交互界面来访问(本文样例使用此方式)

2,联系人记录的属性

在一条联系人记录中,有很多属性,而这些属性又分为单值属性和多值属性。

单值属性是只有一个值的属性:如姓氏、名字、部门、备注等。

多值属性是包含多个值的集合类型,如:电话号码、Email、地址等。

3,多值属性标签的本地名称

在多值属性中包含了label(标签)、value(值)和ID等部分,其中标签和值都是可以重复的,而ID是不能重复的。

对于标签,我们可以使用ABAddressBookCopyLocalizedLabel()方法转为本地标签名(即能看得懂的标签名,比如
work、home)。要不然打印出来的是_$!<Home>!$_,_$!<Work>!$_这样的数据。

4,使用通讯录交互界面样例

本文通过使用通讯录交互界面来访问联系人,并打印出选中联系人的姓名和所有电话。

(想使用代码获取联系人,或者想知道更多联系人属性如何读取可参考我另一篇文章“ Swift - 访问通讯录联系人(使用纯代码实现) ”)

5,效果图如下:

 

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 i 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

    }

}

时间: 2024-08-05 23:19:35

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

Swift - 访问通讯录联系人(使用纯代码实现)

1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码来获取所有联系人信息(本文样例使用此方式) (2)AddressBookUI.framework框架 : 通过系统提供的通讯录交互界面来访问 2,联系人记录的属性 在一条联系人记录中,有很多属性,而这些属性又分为单值属性和多值属性. (1)单值属性是只有一个值的属性: kABPersonLastNa

Android手机获取通讯录联系人信息及短信广播实现

现在越来越多的android应用在注册时都要用到手机号码,通过获取手机验证码来完成注册.也有不少应用提供了手机通讯录备份功能,获得你的允许后把你的通讯录中的手机号码保存到服务器中,你要的时候又可以down下来,比如微信,QQ等就有这们的功能.那我们怎么样获取用户通讯录中的手机号码呢?Android已经为我们做好了准备: ---------------------------------获取通讯录联系人信息----------------------------------------------

通过adb命令向Android模拟器中导入通讯录联系人

使用adb提供的命令, 可以非常方便地从PC中将通讯录导入android模拟器中. 首先要先准备好固定格式的contacts.vcf文件, 该文件即android中的通讯录存储文件. 格式如下: BEGIN:VCARD VERSION:3.0 N:15200000000;;;; TEL;TYPE=cell:15200000000 END:VCARD BEGIN:VCARD VERSION:3.0 N:15200000011;;;; TEL;TYPE=cell:15200000011 END:VC

spring security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中 配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作. Spring Security 的前身是 Acegi S

向Android模拟器中批量导入通讯录联系人

使用adb命令向Android模拟器中批量导入通讯录联系人的方法: 使用adb提供的命令, 可以非常方便地从PC中将通讯录批量导入android模拟器中. 首先要先准备好固定格式的vcf文件, 该文件即android中的通讯录存储格式文件. 格式如下: BEGIN:VCARD VERSION:2.1 N:;Qiqi;;; FN:Qiqi TEL;HOME:7474 EMAIL;HOME:qiqi.com ADR;HOME:;;Qiqi;;;; END:VCARD BEGIN:VCARD VERS

手机通讯录联系人恢复的教程文

手机通讯录联系人恢复是我们生活中常出现的问题,有时候,我们的手机联系人会莫名其妙的不见了,有时候是因为不小心给删掉了.经常在朋友圈,看到好友求助,手机号码不见了,重新发号码备注.且不说这个重存号码多么的麻烦,我觉得重新存也不一定会全部完整.那么手机通讯录联系人恢复通过什么办法可以解决呢?今天小编一招帮你找回误删的联系人.首先想要恢复手机里的联系人记录,那么我们就需要做好充足的准备工作,我们需要使用到一款叫做极速数据恢复的恢复工具.先通过手机浏览器或者手机应用商店将它安装到我们的手机里.然后打开安

安卓手机通讯录联系人恢复

安卓手机通讯录联系人不见了怎么办,在安卓手机上有时候可能遇到手机上面的通讯录联系人都没有了这种情况,给我们的使用带来许多的不便,下面小编就来教你几种解决方法,看看能不能把这个问题解决掉.第一步:首先我们在应用商城或者手机浏览器上面搜索"极速数据恢复"然后下载安装.第二步:打开软件,我们就可以看到手机界面出现的几大恢复功能选项,选择"联系人恢复"功能就可以了.第三步:然后系统会对你的手机进行扫描,扫描的过程中我们只需要耐心等待几分钟就可以了.第四步:扫描完成后会出现所

获取系统联系人&&添加系统联系人

联系人在这个包下 contacts2.db数据库 查询所有的联系人; 需要读写contact权限,注意Uri   content是小写的 找这个错误找了一个小时,汗-  -!! 这个程序只是添加个按钮. package com.example.getcontacts; import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android

(原)SQL Server 系统提供功能的三个疑惑

本文目录列表: 1.SQL Server系统提供的部分疑惑概述2.系统函数调用时DEFAULT代替可选参数使用不统一3.队列字段列message_enqueue_time记录的是UTC日期时间 4.@@Pack_Received系统函数提示信息有错误 5.总结语6.参考清单列表 正文: 1.SQL Server系统提供的部分疑惑概述   近来工作之余一直在系统地学习和研究SQL Server 数据库引擎这一整块,发现了一些原来没有太注意的东西,感觉SQL Server 光数据库引擎这块就有很多要