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

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

  1. 3D虚拟实景互动看房系统提供临场般的交互体验

    VR虚拟漫游展示系统将真实的楼盘建筑1:1真实还原到虚拟空间中以正常视角感受楼间距,楼层高度,房间长度和房间朝向.亲自体验并评估每种方案的优缺点,以减少决策失误. 自主浏览:用户可以自己控制在场景中游 ...

  2. 手机丢失的通讯录联系人怎么恢复?两种简单的恢复方法

    手机丢失的通讯录联系人怎么恢复?手机通讯录是我们手机里重要的功能之一,当我们手机发生故障时,我们还要时不时担心手机通讯录丢失了该怎么办,毕竟手机通讯录记录这我们许多亲朋好友的电话号码,因此是非常重要的 ...

  3. IOS获取系统通讯录联系人信息

    2019独角兽企业重金招聘Python工程师标准>>> IOS获取系统通讯录联系人信息 一.权限注册 随着apple对用户隐私的越来越重视,IOS系统的权限设置也更加严格,在获取系统 ...

  4. android导入手机,轻松!通讯录联系人导入Android手机的绝妙方法

    昨天晚上买了只二手的安卓手机三星Galaxy Nexus,58同城上找的,才500块,还是很值的!我买来也是作为副用手机,主要用于学习Android系统,以后一定会多写写安卓系统方面的技术文章.今天早 ...

  5. java个人通讯录系统_JSP个人通讯录系统

    本文简述了国内外通讯录发展现状,并对通讯录发展现状进行了深度剖析,并根据需求提出了在MyEclipse中整合SSH的平台上开发个人通讯录系统的项目计划.SSH即Struts,Spring,Hibern ...

  6. 系统提供的按钮和图标

    为了打造一致的用户体验(也为了让您的工作更加轻松),iPhone OS提供了许多用于导航栏和工具栏的标准按钮,以及用于标签栏的图标. 本章介绍了可供您使用的标准图标和按钮,以及如何正确地使用它们.不论 ...

  7. php通讯录系统,EML企业通讯录管理系统 php版 v5.4

    企业通讯录管理系统,向企业员工随时随地的提供企业通讯录信息,用户可在手机端实时查看人员联系方式,拨打电话等全面提高了企业内部沟通效率. 主要功能有:用户管理(添加用户,删除用户用户,更新用户资料):通 ...

  8. android adb 联系人,使用adb命令向Android模拟器中导入通讯录联系人的方法

    本文实例讲述了使用adb命令向Android模拟器中导入通讯录联系人的方法.分享给大家供大家参考.具体实现方法如下: 使用adb提供的命令, 可以非常方便地从PC中将通讯录导入android模拟器中. ...

  9. 小微企业名录查询系统_欢迎访问辽宁小微企业名录系统

    欢迎访问辽宁小微企业名录系统 http://xwqy.lngs.gov.cn 辽宁小微企业名录系统是小微企业扶持政策的实施公示台.集装箱,通过访问该系统网站,及时全面知晓小微企业复工复产." ...

最新文章

  1. Outlook 2003命令行参数开关详解
  2. angularjs1-1
  3. 2410 中断过程处理分析
  4. python程序设计基础考试题库及答案_智慧职教Python程序设计基础题库及答案
  5. AndroidStudio常用快捷键及其设置
  6. Java多线程_阻塞队列
  7. python 绘制围棋棋盘_围棋之规则基础(一)
  8. mybatis plus使用in查询
  9. LeetCode(496)——下一个更大元素 I(JavaScript)
  10. SSM框架之Spring MVC(二)常用注解说明
  11. vc6.0快捷键小结收藏
  12. MySQL索引实现、MySQL索引原理、索引下推、索引覆盖、索引失效
  13. 可视化工具sqlyog连接MySQL数据库
  14. S7-1500PLC仿真
  15. AI旋风少年二三事!C4-AI 大赛项目大赏来啦!
  16. msm8953 android8.1编译环境搭建
  17. 流利阅读 2019.3.9 Young children should be taught in their mother tongue, not in English
  18. STM32库函数版IIC驱动OLED屏
  19. java生成二维码,全过程,不要积分
  20. ViewDragHelper实战,实现滑动解锁

热门文章

  1. mysql建立pdm模型_如何使用PowerDesigner创建物理数据模型(PDM)
  2. Docker Compose安装
  3. 2020-11-13size_t和int
  4. CATransition
  5. playsound函数Linux使用,函数PlaySound和sndPlaySound的用法
  6. c++读取文本文件里的指定位置的字符_利用FSO对象向文本文件中写入信息
  7. iphonex黑屏开不了机_iphonexr黑屏,iphonexr突然开不了机
  8. esxi 6.7 7.0 区别_摩托车国产车和合资车有什么区别?
  9. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施...
  10. html获取get信息,在HTML页面用JS获取Get参数方法(示例代码)