获取通讯录-AddressBookUI(OC)

  1. 实现步骤
    // 1. 创建选择联系人的控制器
        ABPeoplePickerNavigationController *ppnc = [[ABPeoplePickerNavigationController alloc] init];
    
    // 2. 设置代理(用来接收用户选择的联系人信息)
        ppnc.peoplePickerDelegate = self;
    
    // 3. 弹出联系人控制器
        [self presentViewController:ppnc animated:YES completion:nil];
    
    // 4. 实现代理
    
        // 1. 选中某个联系人时调用
        - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
        {
    
        }
    
        // 2. 选中某个联系人某个属性时调用
        - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
        {
    
        }
    
        // 3. 点击了取消按钮会执行该方法
        - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
        {
    
        }
    
    // 5. 在对应的代理方法中获取联系人信息
    
        // 1. 获取选中联系人的姓名(姓lastname和名firstname)
        CFStringRef firstname = ABRecordCopyValue(person, kABPersonFirstNameProperty);
        CFStringRef lastname = ABRecordCopyValue(person, kABPersonLastNameProperty);
        NSString *firstName = (__bridge_transfer NSString *)(firstname);
        NSString *lastName = (__bridge_transfer NSString *)(lastname);
        NSLog(@"%@ %@", firstName, lastName);
    
        // 2. 获取联系人的电话号码
        ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        CFIndex count = ABMultiValueGetCount(phones);
        for (CFIndex i = 0; i < count; i++) {
            NSString *phoneLabel = (__bridge_transfer NSString *)ABMultiValueCopyLabelAtIndex(phones, i);
            NSString *phoneValue = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phones, i);
                NSLog(@"label : %@ value : %@", phoneLabel, phoneValue);
            }
    
        // 3. 释放不再使用的对象
        CFRelease(phones);
    

你可能感兴趣的:(获取通讯录-AddressBookUI(OC))