本文介绍的是iPhone应用中关于通讯录联系人开发案例,和通讯录中联系人相关的应用iPhone提供了两 个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示 iPhone数据库中的联系人信息。
AD:
iPhone应用之通讯录联系人开发案例是本文要介绍的内容,主要是来讲关于UITabBarController学习笔记,来看详细内容。和通讯录中联系人相关的应用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。
例子:
- -
(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; - }
2.AddressBook部分
AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。
通讯录中联系人的各个属性有两种形式,单值属性和多值属性。单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。
(a)常用方法
- CFTypeRef
ABRecordCopyValue ( -
ABRecordRef record, -
ABPropertyID property - );
从一个记录中获取某个属性对应的值
(b)单值属性对应的方法
- CFStringRef
ABRecordCopyCompositeNam e ( -
ABRecordRef record - );
获取联系人完整的姓名。
(c)多值属性对应的方法
- CFTypeRef
ABMultiValueCopyValueAtI ndex ( -
ABMultiValueRef multiValue, -
CFIndex index - );
返回对应位置处的属性值
- CFStringRef
ABMultiValueCopyLabelAtI ndex ( -
ABMultiValueRef multiValue, -
CFIndex index - );
返回对应位置处的属性标识
- CFArrayRef
ABMultiValueCopyArrayOfA llValues ( -
ABMultiValueRef multiValue - );
返回包含所有属性值的数组
- CFIndex
ABMultiValueGetCount ( -
ABMultiValueRef multiValue - );
返回属性值的个数
例子:
- //获取联系人姓名
- 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]; - }
- }
小结:iPhone应用之通讯录联系人开发案例的内容介绍完了,希望本文对你有所帮助!