• 通讯录--(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);

        }

     

    }

  • 相关阅读:
    Android中Webview与javascript的交互(互相调用)
    Android EditText横屏时软键盘不占据全屏
    Android 获取当前IP地址
    Android Dialog监听返回键!
    Android 显示特殊符号
    给EditText的drawableRight属性的图片设置点击事件
    Android 获取静态上下文(Application)
    Android dp和px之间进行转换
    Android 透明状态栏
    Android平台实现与Apache Tomcat服务器数据交互(MySql数据库)
  • 原文地址:https://www.cnblogs.com/daxueshan/p/5843997.html
Copyright © 2020-2023  润新知