實(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í)候")
}