iOS开发技能iOS 开发 iOS Developer

实用基础技术 | 获取通信录

2016-11-21  本文已影响175人  BWLi420

在日常的程序开发中,我们不仅会使用用户的账号密码进行数据的管理,在实际情况下,对于用户通信录的获取也尤为重要,基于通信录可以扩展应用程序的使用范围。

通信录的开发

图片来自网络

访问用户通信录的方式

一、AddressBookUI 的使用

extension ViewController: ABPeoplePickerNavigationControllerDelegate {
    
    /// 用户选中了某一个联系人
    ///
    /// - Parameters:
    ///   - peoplePicker: 联系人选择器
    ///   - person: 选中的联系人
    func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord) {
        //获取联系人姓名
        guard let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeUnretainedValue() as? String else { return } //姓
        guard let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeUnretainedValue() as? String else { return } //名
        print("姓名: ", firstName, lastName)
        
        //获取联系人电话
        let phones = ABRecordCopyValue(person, kABPersonPhoneProperty).takeUnretainedValue() as ABMultiValue
        
        let count = ABMultiValueGetCount(phones)
        for i in 0..<count {
            
            let phoneLable = ABMultiValueCopyLabelAtIndex(phones, i).takeUnretainedValue() as String
            guard let phoneValue = ABMultiValueCopyValueAtIndex(phones, i).takeUnretainedValue() as? String else { return }
            
            print(phoneLable + " 电话: " + phoneValue)
        } 
    }
}

二、AddressBook 的使用

iOS9之前无UI

三、ContactsUI 的使用

iOS9之后有UI

以上代理一次只能选取一个联系人,若要一次选择多个联系人,可以使用以下的代理方法

/// 选择多个联系人
///
/// - Parameters:
///   - picker: 选择联系人控制器
///   - contact: 选择的联系人数组
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {       
// 代码      
}

四、Contacts 的使用

iOS9之后无UI

写在最后

本文只针对基础学习的总结,一般在我们手机通信录中的联系人的信息远远不止姓名和电话这些基础信息,还包括头像、邮箱、地址、纪念日等其他信息,这里仅以获取姓名电话为例抛砖引玉,其他的信息处理过程类似,大家触类旁通即可。

上一篇下一篇

猜你喜欢

热点阅读