获取通讯录-AddressBookUI(swift)

获取通讯录-AddressBookUI(swift)

  1. 导入框架
    import AddressBookUI
    
  2. 实现步骤及代码
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        // 1. 创建一个联系人选择控制器
        let pvc = ABPeoplePickerNavigationController()
    
        // 1.1 设置代理, 接收用户的点击
        pvc.peoplePickerDelegate = self
    
        // 2. 直接弹出
        presentViewController(pvc, animated: true, completion: nil)
    }
    
    extension ViewController: ABPeoplePickerNavigationControllerDelegate {
    
        // 点击取消按钮的时候
        func peoplePickerNavigationControllerDidCancel(peoplePicker: ABPeoplePickerNavigationController) {
    
            print("取消")
        }
    
        // 选择某个联系人的时候
        func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord) {
    
             print("选择某个联系人的时候")
    
            // ABRecord, 一个联系人对象
            // 如果想要从这个对象里面, 获取值, 应该使用一个函数进行获取ABRecordCopyValue
            // 参数1: 记录
            // 参数2: 属性名
    
            let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as! String
            let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as! String
            print(firstName, lastName)
    
            // Unmanaged<AnyObject>!
            // swift使用corefoundation框架里面的函数创建的对象分为两种
            // 1. 内存托管对象, 不需要我们程序员处理
            // 2. 内存非托管对象, 就必须要求我们程序员处理
            //          takeRetainedValue(): 会对接受到的对象, 进行一次引用 create copy
            //          takeUnretainedValue(): 会对接受到的对象, 不会进行一次引用 get
    
            // 取出电话号码 多值属性 (标签+值) ABMultiValueRef
            // 关于一个联系人记录里面的属性, 分为, 简单属性, 复杂属性(多值属性),
            let phoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() as ABMultiValueRef
    
            // 遍历电话号码(获取多值属性里面的个数)
            let count = ABMultiValueGetCount(phoneNums)
            for i in 0..<count {
    
                // 每次循环, 都是一个电话号码记录(标签+值)
    
                let label = ABMultiValueCopyLabelAtIndex(phoneNums, i).takeRetainedValue()
    
                let value = ABMultiValueCopyValueAtIndex(phoneNums, i).takeRetainedValue() as! String
                print(label, value)
    
            }
        }
    
        // 选择某个联系人里面的某个属性时调用
        // 并且, 注意, 一定要把上面的额方法, 注释掉
        func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
             print("选择某个联系人某个属性时的时候")
    }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容