博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通讯录--(iOS9独有的方法)
阅读量:7273 次
发布时间:2019-06-29

本文共 2943 字,大约阅读时间需要 9 分钟。

导入库文件   #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动作中都会触发。在多选模式下,canceldone的左侧。

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

    

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

    

}

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

//原文链接:

 

#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);

    }

 

}

转载于:https://www.cnblogs.com/daxueshan/p/5843997.html

你可能感兴趣的文章
聊一聊 Spring 中的线程安全性
查看>>
基于linux6.x安装xgboost
查看>>
我的友情链接
查看>>
H3C设备*** ike模式配置
查看>>
付出才有收获 浅谈新站优化该如何四步走
查看>>
百度产品“垄断”流量 seo该何去何从
查看>>
python 实现邮件发送
查看>>
cocos2d-x项目101次相遇:action ,移动sprite
查看>>
千万级MySQL数据库建立索引及提高性能的手段(2)
查看>>
CnPack 使用的组件命名约定
查看>>
WinAPI: GetNextWindow - 获取指定窗口Z上或Z下的窗口的句柄
查看>>
Linux系统管理之硬盘管理
查看>>
自动安装centos
查看>>
翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 7 章: 闭包 vs 对象...
查看>>
【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制...
查看>>
zthread
查看>>
4个药罐,称量1次,判断哪个药罐被污染了
查看>>
Spring学习笔记(14)——SpEL
查看>>
ActiveMQ的简单使用
查看>>
nagios配置yum方法
查看>>