通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,
使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。
1.AddressBookUI显示部分
AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:
ABPeoplePickerNavigation
ABPersonViewController:显示一个具体联系人的信息
ABNewPersonViewControlle
ABUnknownPersonViewContr
由于其中最主要的是ABPeoplePickerNavigation
(a)创建并初始化一个ABPeoplePickerNavigation
(b)设置其代理(delegate)
(c)用presentModalViewControll
例子:
- -
(IBAction)showPicker:(id)sender { -
ABPeoplePickerNavigation Controller *picker = -
[[ABPeoplePickerNavigation Controller alloc] init]; -
picker.peoplePickerDelegate = self; -
[self presentModalViewControll er:picker animated:YES]; -
[picker release]; - }
ABPeoplePickerNavigation
(1)
- peoplePickerNavigationCo
ntrollerDidCancel:
当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。
(2)
- peoplePickerNavigationCo
ntroller:shouldContinueAfterSelec tingPerson:
当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。如果希望可以继续显示这个联系人更具体的信息,则return YES。否则取消整个通讯录页面的显示并return NO。
(3)
- eoplePickerNavigationCon
troller:shouldContinueAfterSelec tingPerson:property:identifier:
如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。如果希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则return YES。否则取消整个通讯录页面的显示并return NO。
===============================examples=======================================
例子:
- -
(void)peoplePickerNavigationCo ntrollerDidCancel:(ABPeoplePickerNavigation Controller *)peoplePicker { - //
assigning control back to the main controller - [picker
dismissModalViewControll erAnimated:YES]; - }
- -
(BOOL)peoplePickerNavigationCo ntroller: (ABPeoplePickerNavigation Controller *)peoplePicker - shouldContinueAfterSelec
tingPerson:(ABRecordRef)person { - //获取联系人姓名
- name.text
= (NSString*)ABRecordCopyCompositeNam e(person); - //获取联系人电话
- ABMutableMultiValueRef
phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty); - NSMutableArray
*phones = [[NSMutableArray alloc] init]; - int
i; - for
(i = 0; i < ABMultiValueGetCount(phoneMulti); i++) { - NSString
*aPhone = [(NSString*)ABMultiValueCopyValueAtI ndex(phoneMulti, i) autorelease]; - NSString
*aLabel = [(NSString*)ABMultiValueCopyLabelAtI ndex(phoneMulti, i) autorelease]; - NSLog(@"PhoneLabel:%@
Phone#:%@",aLabel,aPhone); - if([aLabel
isEqualToString:@"_$!<Mobile>!$_"]) - {
- [phones
addObject:aPhone]; - }
- }
- phoneNo.text=@"";
- if([phones
count]>0) - {
- NSString
*mobileNo = [phones objectAtIndex:0]; - phoneNo.text
= mobileNo; - //NSLog(mobileNo);
- }
- //获取联系人邮箱
- ABMutableMultiValueRef
emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty); - NSMutableArray
*emails = [[NSMutableArray alloc] init]; - for
(i = 0;i < ABMultiValueGetCount(emailMulti); i++) - {
- NSString
*emailAdress = [(NSString*)ABMultiValueCopyValueAtI ndex(emailMulti, i) autorelease]; - [emails
addObject:emailAdress]; - }
- email.text=@"";
- if([emails
count]>0) - {
- NSString
*emailFirst=[emails objectAtIndex:0]; - email.text
= emailFirst; - //NSLog(emailFirst);
- }
- [peoplePicker
dismissModalViewControll erAnimated:YES]; - return
NO; - }
- -
(BOOL)peoplePickerNavigationCo ntroller: (ABPeoplePickerNavigation Controller *)peoplePicker -
shouldContinueAfterSelec tingPerson:(ABRecordRef)person - property:(ABPropertyID)property
-
identifier:(ABMultiValueIdentifier)identifier{ - return
NO; - }