獲取通訊錄-AddressBookUI(swift)

獲取通訊錄-AddressBookUI(swift)

  1. 導(dǎo)入框架
    import AddressBookUI
    
  2. 實(shí)現(xiàn)步驟及代碼
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        // 1. 創(chuàng)建一個(gè)聯(lián)系人選擇控制器
        let pvc = ABPeoplePickerNavigationController()
    
        // 1.1 設(shè)置代理, 接收用戶的點(diǎn)擊
        pvc.peoplePickerDelegate = self
    
        // 2. 直接彈出
        presentViewController(pvc, animated: true, completion: nil)
    }
    
    extension ViewController: ABPeoplePickerNavigationControllerDelegate {
    
        // 點(diǎn)擊取消按鈕的時(shí)候
        func peoplePickerNavigationControllerDidCancel(peoplePicker: ABPeoplePickerNavigationController) {
    
            print("取消")
        }
    
        // 選擇某個(gè)聯(lián)系人的時(shí)候
        func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord) {
    
             print("選擇某個(gè)聯(lián)系人的時(shí)候")
    
            // ABRecord, 一個(gè)聯(lián)系人對(duì)象
            // 如果想要從這個(gè)對(duì)象里面, 獲取值, 應(yīng)該使用一個(gè)函數(shù)進(jìn)行獲取ABRecordCopyValue
            // 參數(shù)1: 記錄
            // 參數(shù)2: 屬性名
    
            let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as! String
            let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as! String
            print(firstName, lastName)
    
            // Unmanaged<AnyObject>!
            // swift使用corefoundation框架里面的函數(shù)創(chuàng)建的對(duì)象分為兩種
            // 1. 內(nèi)存托管對(duì)象, 不需要我們程序員處理
            // 2. 內(nèi)存非托管對(duì)象, 就必須要求我們程序員處理
            //          takeRetainedValue(): 會(huì)對(duì)接受到的對(duì)象, 進(jìn)行一次引用 create copy
            //          takeUnretainedValue(): 會(huì)對(duì)接受到的對(duì)象, 不會(huì)進(jìn)行一次引用 get
    
            // 取出電話號(hào)碼 多值屬性 (標(biāo)簽+值) ABMultiValueRef
            // 關(guān)于一個(gè)聯(lián)系人記錄里面的屬性, 分為, 簡(jiǎn)單屬性, 復(fù)雜屬性(多值屬性),
            let phoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() as ABMultiValueRef
    
            // 遍歷電話號(hào)碼(獲取多值屬性里面的個(gè)數(shù))
            let count = ABMultiValueGetCount(phoneNums)
            for i in 0..<count {
    
                // 每次循環(huán), 都是一個(gè)電話號(hào)碼記錄(標(biāo)簽+值)
    
                let label = ABMultiValueCopyLabelAtIndex(phoneNums, i).takeRetainedValue()
    
                let value = ABMultiValueCopyValueAtIndex(phoneNums, i).takeRetainedValue() as! String
                print(label, value)
    
            }
        }
    
        // 選擇某個(gè)聯(lián)系人里面的某個(gè)屬性時(shí)調(diào)用
        // 并且, 注意, 一定要把上面的額方法, 注釋掉
        func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
             print("選擇某個(gè)聯(lián)系人某個(gè)屬性時(shí)的時(shí)候")
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容