通讯录--(iOS9独有的方法)
导入库文件 #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独有的方法)的更多相关文章
- Android项目--浅析系统通讯录中的那些方法
系统通讯录,以前的版本虽然过时了,不过有些东西还是可以用. 1.开启系统联系人添加 /** 添加联系人 */ Intent intent = new Intent(Intent.ACTION_INSE ...
- 理解JAVA - 面向对象(object) - 属性,方法
理解JAVA - 面向对象(object) - 属性,方法 多态的体现: 向上造型,父类接收子类对象:向上造型: 从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...
- java父类与接口有相同的方法
这是java多态的一个体现,如果一个类classA继承了类classB,有实现了接口interfaceA,并且接口中有方法funA(),且父类classB中也有funA(),那么对于classA来说既 ...
- 升级到iOS9之后的相关适配
iOS9AdaptationTips(iOS9开发学习交流群:458884057) iOS9适配系列教程[中文在页面下方]转自@iOS程序犭袁 (截至2015年9月26日共有10篇,后续还将持续更新. ...
- 【转】iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等
iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Crash. ...
- Python 列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- iOS9基础知识(OC)笔记
1月16日 Objective C(20世纪80年代初) 一.OC语言概述 1.1985年,Steve Jobs成立了NeXT公司 2.1996年,12月20日,苹果公司宣布收购了NeXT ...
- iOS9适配系列教程
链接地址:http://www.open-open.com/lib/view/open1443194127763.html 中文快速导航: iOS9网络适配_ATS:改用更安全的HTTPS(见Demo ...
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
随机推荐
- 分享在MVC3.0中使用jQuery DataTable 插件
前不久在网络上看见一个很不错的jQuery的DataTable表格插件.后来发现在MVC中使用该插件的文章并不多.本文将介绍在MVC3.0如何使用该插件.在介绍该插件之前先简单介绍一下,推荐该插件的原 ...
- Android开发系列之adb常用命令
对于Android开发者来说,如果没有adb的帮助,那肯定就跟少了一只手那样别扭.其实笔者在刚刚学习Android开发的时候,也没有意识到adb的重要性.想想只要用IDE画出界面,然后实现后台的逻辑代 ...
- [nRF51822] 16、nRF51822的随机数生成器,及随机数生成器的一些知识(可以帮您补补随机数发生器的知识)
1.前言 随机数生成器在通信.加密.图像传输等领域应用广泛,且一般起到关键性作用.我在最近设计的一个近场射频通信协议的碰撞避退算法的过程中,便对此有深深体会. 2.伪随机数发生器 随机数发生器一般包括 ...
- 安装Hadoop及Spark(Ubuntu 16.04)
安装Hadoop及Spark(Ubuntu 16.04) 安装JDK 下载jdk(以jdk-8u91-linux-x64.tar.gz为例) 新建文件夹 sudo mkdir /usr/lib/jvm ...
- androidTv界面刷新跳动的问题
今天刚完成老大要求的新模块,在界面刷新的时候遇到了一些问题:一个scrollview动态的添加控件且控件中的数据进行更换的时候,出现的界面跳动的问题 刚开始以为是界面没有展示完全配合scrollvie ...
- WPF DEV CellTemplateSelector(一个正确使用DevExpress CellTemplateSelector的Demo)
说明 我在项目中根据需求需要用到WPF Dev CellTemplateSelector时,遇到不少坑.曾一度想要放弃使用模板转换器,但又心有不甘,终于在不断努力下,达到了需求的要求.所以写下来和大家 ...
- oracle__wm_concat函数
首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 准备测试数据 SQL> ...
- (原)SQL Server 系统提供功能的三个疑惑
本文目录列表: 1.SQL Server系统提供的部分疑惑概述2.系统函数调用时DEFAULT代替可选参数使用不统一3.队列字段列message_enqueue_time记录的是UTC日期时间 4.@ ...
- iOS开发tips-UITableView、UICollectionView行高/尺寸自适应
UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比较简单,首先必须设置estimatedRowHeight给出预估高度,设置rowHeight为UITabl ...
- 如何用docker安装laravel开发环境
如何用docker安装laravel开发环境 看laravel框架的官方文档安装部分时,发现需要安装特别多软件,估计还有许多复杂的配置,官方推荐使用Laravel Homestead虚拟机进行安装,但 ...