通讯录--(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动作中都会触发。在多选模式下,canceldone的左侧。

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

    

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

    

}

//其他四个代理方法只要实现其中一个就行了。分别为单选和多选两组,都实现的时候,多选优先执行,单选不执行。特别要注意的是predicateForEnablingContactpredicateForSelectionOfContactpredicateForSelectionOfProperty这三组属性会影响它们的动作。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);

    }

 

}

posted @ 2016-09-05 22:54  Da雪山  阅读(361)  评论(0编辑  收藏  举报