获取通讯录-AddressBookUI(swift)

获取通讯录-AddressBookUI(swift)

  1. 导入框架
    import AddressBookUI
    
  2. 实现步骤及代码
    override func touchesBegan(touches: Set, 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!
            // 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..

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