1.創(chuàng)建選擇聯(lián)系人的界面
ABPeoplePickerNavigationController*ppad = [[ABPeoplePickerNavigationController alloc]init];
2.設(shè)置代理
ppad.peoplePickerDelegate=self;
3.彈出選擇聯(lián)系人頁面
[selfpresentViewController:ppsd animated:YEScompletion:nil];
4.代理方法說明
4.1
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person
{
/*
__bridge NSString * :將CoreFoundation框架的對象所有權(quán)交給Foundation框架來使用,但是Foundation框架中的對象并不能管理該對象內(nèi)存
__bridge_transfer NSString * :將CoreFoundation框架的對象所有權(quán)交給Foundation來管理,如果Foundation中對象銷毀,那么我們之前的對象(CoreFoundation)會一起銷毀
*/
// 1.獲取選中聯(lián)系人的姓名(姓lastname和名firstname)
CFStringRef firstname =ABRecordCopyValue(person,kABPersonFirstNameProperty);
CFStringRef lastname =ABRecordCopyValue(person,kABPersonLastNameProperty);
NSString *firstName = (__bridge_transferNSString*)(firstname);
NSString *lastName = (__bridge_transferNSString*)(lastname);
NSLog(@"%@ %@", firstName, lastName);
// 2.獲取聯(lián)系人的電話號碼
ABMultiValueRef phones =ABRecordCopyValue(person,kABPersonPhoneProperty);
CFIndexcount =ABMultiValueGetCount(phones);
for(CFIndexi =0; i < count; i++) {
NSString *phoneLabel = (__bridge_transferNSString*)ABMultiValueCopyLabelAtIndex(phones, i);
NSString *phoneValue = (__bridge_transferNSString*)ABMultiValueCopyValueAtIndex(phones, i);
NSLog(@"label : %@ value : %@", phoneLabel, phoneValue);
}
// 3.釋放不再使用的對象
CFRelease(phones);
}
選中一個聯(lián)系人的時候會執(zhí)行該代理方法洞渔,但是如果該方法實(shí)現(xiàn)了,則不會進(jìn)入聯(lián)系人的詳細(xì)界面
4.2
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
進(jìn)入聯(lián)系人的詳細(xì)界面后,選擇該聯(lián)系人的某個屬性時柏蘑,會執(zhí)行該方法;
如果實(shí)現(xiàn)了該方法粹庞,那么選中聯(lián)系人的屬性時咳焚,就會返回主頁面,不會進(jìn)入下一個頁面
4.3
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController*)peoplePicker
點(diǎn)擊了取消按鈕會執(zhí)行該方法