ios-ContactsUI框架简单使用

来源:互联网 发布:什么软件可以做一寸照 编辑:程序博客网 时间:2024/06/08 01:15

在ios9的时候AddressBook.framework和AddressBookUI.framework全部过时,苹果新推Contacts.framework和ContactsUI.framework,这两个框架用起来就比较简单了。

下面先简单的介绍下用法。我们先去创建一个通讯录界面也就是系统自带的UI界面

    //创建通讯录界面    CNContactPickerViewController * picker = [CNContactPickerViewController new];    //设置代理,代理对象需要去遵守CNContactPickerDelegate这个协议    picker.delegate = self;    //弹出模态视图    [self presentViewController:picker animated:YES completion:nil];
有5个代理方法是我们需要了解的如下所示

#pragma mark 点击取消的时候会调用下面的方法

-(void)contactPickerDidCancel:(CNContactPickerViewController *)picker{    NSLog(@"cancel");}
#pragma mark 会进入多选模式,当我们选中了多个联系人没有选中的时候再去点击完成会调用

-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact *> *)contacts{    NSLog(@"%@",contacts);}
进入多选联系人的界面如下所示


#pragma mark 选中某个联系人的时候会去调用,点击某个联系人之后会退出

这里我们需要通过联系人中取phoneNumbers也就是电话号码,我们之所以下面会用CNLabeldValue和CNPhoneNumber是因为帮助显示如下图所示,


-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{    //1、获取姓名    NSLog(@"givenName: %@ familyName: %@",contact.givenName,contact.familyName);            for (CNLabeledValue *labelValue in contact.phoneNumbers)   {           //获取的是什么电话比如说有家庭电话,工作电话之类的       NSString * str = labelValue.label;       NSLog(@"%@",str);       //获取电话号码       CNPhoneNumber * number = labelValue.value;       NSLog(@"phoneNumber:  %@",number.stringValue);   }}
#pragma mark 点击某个属性的时候会去调用下面的代理方法

-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty{    NSLog(@"%@",contactProperty);}
#pragma mark 进入多选模式,点击done会调用下面的代理方法

需要注意的是,如果我们这里不去设置通讯录控制器的这个predicateForSelectionOfProperty属性,我们仅仅实现下面这个方法的话,在多选模式下不管选没选中联系人,点击Done完成按钮的时候下面的contactProperties都是为null。如何去设置了predicateForSelectionOfProperty,比如说设置了,那么只有满足下面这个正则表达式条件的联系人可以被选中,其他联系人无法选中,选中之后点击完成,也是直接就dismiss了。

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

-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperties:(NSArray<CNContactProperty *> *)contactProperties{    NSLog(@"%@",contactProperties);}
一般来说上面这五个代理方法中我们除了取消的那个代理方法,其他四个代理方法我们选择一个实现其实就可以了。




阅读全文
0 0