iOS 调用通讯录

iOS9之前使用AddressBook,AddressBookUI框架
iOS9之后使用Contacts,ContactsUI框架

因为只用到了选择联系人电话号码的功能,所以选择了ContactsUI。

导入头文件
#import 

#pragma mark --- 调用系统通讯录
- (void)selectContact
{
    // 1.创建选择联系人的控制器
    CNContactPickerViewController *contactVc = [[CNContactPickerViewController alloc] init];
    // 2.设置代理
    contactVc.delegate = self;
    // 3.弹出控制器
    [self presentViewController:contactVc animated:YES completion:nil];
}

#pragma mark --- CNContactPickerDelegate
// 1.当选中某一个联系人时会执行该方法
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{

    // 1.获取联系人的姓名
    NSString *lastname = contact.familyName;
    NSString *firstname = contact.givenName;
    
    // 2.获取联系人的电话号码,不展开详情
    NSArray *phoneNums = contact.phoneNumbers;

    此处获取的是该联系人的第一个号码
    CNLabeledValue *labeledValue = phoneNums[0]
    CNPhoneNumber *phoneNumer = labeledValue.value;
    NSString * phoneValue = phoneNumer.stringValue;
    NSLog(@"%@", phoneValue);
  
    遍历所有的号码
    for (CNLabeledValue *labeledValue in phoneNums) {

        CNPhoneNumber *phoneNumer = labeledValue.value;
        NSString *phoneValue = phoneNumer.stringValue;
        NSLog(@"%@",phoneValue);
    }
}

// 2.当选中某一个联系人的某一个属性时会执行该方法(展开详情)
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty{

}

// 3.点击了取消按钮会执行该方法
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker{
  
}

注意:代理方法1和代理方法2同时写,代理方法2不执行

使用ContactsUI的时候 授权与不授权 都可以使用(我没有授权,也可以正常的调用)

有时会出现联系人没有号码的时候,需要进行判断。

你可能感兴趣的:(iOS 调用通讯录)