导入库文件   #import <ContactsUI/ContactsUI.h>

#pragma mark iOS9 新出的点击通讯录的获取信息的办法

#pragma mark - 先弹出联系人控制器

- (IBAction)ios9Clicked:(id)sender {

// 1. 创建控制器

CNContactPickerViewController * picker = [CNContactPickerViewController new];

// 2. 设置代理

picker.delegate = self;

// 3. 设置相关属性,谓词筛选email地址是@mac.com的联系人

picker.predicateForSelectionOfProperty = [NSPredicate predicateWithFormat:@"(key == 'emailAddresses') AND (value LIKE '*@mac.com')"];

//谓词筛选email地址数等于1的联系人

picker.predicateForSelectionOfContact = [NSPredicate predicateWithFormat:@"emailAddresses.@count == 1"];

// 4. 弹出

[self presentViewController: picker  animated:YES completion:nil];

}

#pragma mark - 取消选中联系人的时候调用,点击右上角的cancel时候触发,而不是picker的所有dismiss动作中都会触发。在多选模式下,cancel在done的左侧。

- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker {

NSLog(@"mxs点击了取消");

}

//其他四个代理方法只要实现其中一个就行了。分别为单选和多选两组,都实现的时候,多选优先执行,单选不执行。特别要注意的是predicateForEnablingContact,predicateForSelectionOfContact,predicateForSelectionOfProperty这三组属性会影响它们的动作。predicateForEnablingContact返回YES的联系人才是可交互的,默认联系人都是可交互的。

//原文链接:http://www.jianshu.com/p/e6b7cb1eca9e

#pragma mark - 选择联系人的时候调用 (如果predicateForSelectionOfContact属性没被设置或符合筛选条件,如不符合则不会触发该方法并进入联系人详情页)

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact {

//1. 获取姓名 ,givenName == firstName

NSLog(@"givenName: %@, familyName: %@", contact.givenName, contact.familyName);

//2. 获取电话,泛型,会在数组遍历时帮很大的忙

for (CNLabeledValue *labeledValue in contact.phoneNumbers) {

NSLog(@"label: %@",labeledValue.label);

CNPhoneNumber *phoneNumber = labeledValue.value;

NSLog(@"phoneNumber: %@",phoneNumber.stringValue);

}

}

#pragma mark - 实现了此方法, 就可以选择多个联系人,该方法在点击done按钮时触发,注意:该方法不受predicateForSelectionOfContact属性影响!

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact *> *)contacts {

for (CNContact *contact in contacts) {

NSLog(@"givenName: %@, familyName: %@", contact.givenName, contact.familyName);

//2. 获取电话,泛型,会在数组遍历是帮很大的忙

for (CNLabeledValue *labeledValue in contact.phoneNumbers) {

NSLog(@"label: %@",labeledValue.label);

CNPhoneNumber *phoneNumber = labeledValue.value;

NSLog(@"phoneNumber: %@",phoneNumber.stringValue);

}

}

}

#pragma mark - 点击某个联系人的某个属性(property)时触发并返回该联系人属性(contactProperty)。只实现该方法时,可以进入到联系人详情页面(如果predicateForSelectionOfProperty属性没被设置或符合筛选条件,如不符合会触发默认操作,即打电话,发邮件等)。

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {

}

#pragma mark - 只实现该方法时,停留在多选模式下的联系人列表页面(如果predicateForSelectionOfProperty属性没被设置或符合筛选条件,该联系人才能被选中),在点击done按钮的时候触发,返回的contactProperties中只包含选中的contactProperties,没选中的话返回空。

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperties:(NSArray<CNContactProperty *> *)contactProperties {

// 循环打印出所有选中的联系人名字

for (CNContactProperty *contactProperty in contactProperties) {

NSLog(@"%@",contactProperty.contact.givenName);

}

}

通讯录--(iOS9独有的方法)的更多相关文章

  1. Android项目--浅析系统通讯录中的那些方法

    系统通讯录,以前的版本虽然过时了,不过有些东西还是可以用. 1.开启系统联系人添加 /** 添加联系人 */ Intent intent = new Intent(Intent.ACTION_INSE ...

  2. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  3. java父类与接口有相同的方法

    这是java多态的一个体现,如果一个类classA继承了类classB,有实现了接口interfaceA,并且接口中有方法funA(),且父类classB中也有funA(),那么对于classA来说既 ...

  4. 升级到iOS9之后的相关适配

    iOS9AdaptationTips(iOS9开发学习交流群:458884057) iOS9适配系列教程[中文在页面下方]转自@iOS程序犭袁 (截至2015年9月26日共有10篇,后续还将持续更新. ...

  5. 【转】iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等

    iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Crash. ...

  6. Python 列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  7. iOS9基础知识(OC)笔记

    1月16日 Objective  C(20世纪80年代初) 一.OC语言概述 1.1985年,Steve  Jobs成立了NeXT公司 2.1996年,12月20日,苹果公司宣布收购了NeXT  ...

  8. iOS9适配系列教程

    链接地址:http://www.open-open.com/lib/view/open1443194127763.html 中文快速导航: iOS9网络适配_ATS:改用更安全的HTTPS(见Demo ...

  9. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

随机推荐

  1. 算法一之N皇后问题

    (写这篇文章主要是明天就要考试了,算法考试,今天不想再复习了,xiang着今天也开通了博客,于是在这个平台上进行复习,应该会更高效.最后祝愿我明天考个好成绩.嘻嘻...) n皇后问题,主要是应用到回溯 ...

  2. Chrome中java因过期而遭到阻止

    http://www.cnblogs.com/jifeng/p/3453322.html 在Chrome快捷方式图标上右击,选[属性],然后在[目标]一栏的末尾添加这么一段命令(flag): --al ...

  3. Bootstrap入门(二十七)JS插件4:标签页

    Bootstrap入门(二十七)JS插件4:标签页 标签页的切换可以带动内容的变化 首先我们引入CSS文件 <link href="bootstrap.min.css" re ...

  4. mesos 资源分配

    Mesos 资源分配 众所周知, Mesos在运行时使用wDRF( Dominant Resource Fairness)算法进行一级资源分配, 通过应用程序(Framework)运行时使用资源进行二 ...

  5. 如何开发基于Dubbo RPC的分布式服务?

    什么是Dubbo? Dubbo能做什么? 在Crystal框架下,如何开发基于Dubbo RPC的服务? 在Crystal框架下,如何调用Dubbo RPC服务? 相关的文章 什么是Dubbo? Du ...

  6. SQL递归查询知多少

    最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图.数据库中保持的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否为根节点 ...

  7. db_link

    1.查询 SYSDBA登录, sys登录    SELECT * FROM SYS.link$; select owner,object_name from dba_objects where obj ...

  8. Java实现二叉树的前序、中序、后序遍历(非递归方法)

      在上一篇博客中,实现了Java中二叉树的三种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似,也简单 ...

  9. Android jni 编程3(对基本类型一维整型数组的操作)总结版

    主要学习资料:黑马程序员的NDK方法使用(生产类库so)              jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...

  10. c#访问存储过程

    // 2015/07/04 // 访问存储过程 using System; using System.Collections.Generic; using System.Linq; using Sys ...