获取通讯录内容-创新互联
先导入AddressBook.framework和
我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好成都网站建设、网站建设服务,我们努力开拓更好的视野,通过不懈的努力,成都创新互联公司赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,小程序开发,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。AddressBookUI.framework两个框架
添加地址簿框架后,我们还需要在工程中添加相应的头文件:
#import
#import
1.AddressBookUI显示部分
AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:
ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息
ABPersonViewController:显示一个具体联系人的信息
ABNewPersonViewController:增加一个新的联系人
ABUnknownPersonViewController:完善一个联系人的信息
由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。
(a)创建并初始化一个ABPeoplePickerNavigationController对象
(b)设置其代理(delegate)
(c)用presentModalViewController:animated:这个方法进行显示整个通讯录页面
例子:
- (IBAction)showPicker:(id)sender {
ABPeoplePickerNavigationController *picker =
[[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
[picker release];
}
ABPeoplePickerNavigationControllerDelegate的方法介绍
当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。
(1)peoplePickerNavigationControllerDidCancel:
例子 :
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
[peoplePicker dismissViewControllerAnimated:YES completion:nil];
}
(2)选择具体联系人的时候,拿到该联系人的具体信息
-(void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person {
//获取联系人姓名
NSString *name = (__bridge NSString*)ABRecordCopyCompositeName(person);
NSLog(@"name = %@",name);
//获取联系人电话
ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSMutableArray *phones = [[NSMutableArray alloc] init];
int i;
for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {
NSString *aPhone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i);
NSString *aLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i);
NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);
if([aLabel isEqualToString:@"_$!
{
[phones addObject:aPhone];
}
}
NSString *phone;
if([phones count]>0)
{
NSString *mobileNo = [phones objectAtIndex:0];
phone = mobileNo;
NSLog(@"phone = %@", phone);
//NSLog(mobileNo);
}
//获取联系人邮箱
ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty);
NSMutableArray *emails = [[NSMutableArray alloc] init];
for (i = 0;i < ABMultiValueGetCount(emailMulti); i++)
{
NSString *emailAdress = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i);
[emails addObject:emailAdress];
}
NSString *email;
if([emails count]>0)
{
NSString *emailFirst=[emails objectAtIndex:0];
email = emailFirst;
NSLog(@"email = %@",email);
}
[peoplePicker dismissViewControllerAnimated:YES completion:nil];
}
2.AddressBook部分
AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。
通讯录中联系人的各个属性有两种形式,单值属性和多值属性。单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。
(a)常用方法
CFTypeRef ABRecordCopyValue (
ABRecordRef record,
ABPropertyID property
);
从一个记录中获取某个属性对应的值
(b)单值属性对应的方法
CFStringRef ABRecordCopyCompositeName (
ABRecordRef record
);
获取联系人完整的姓名。
(c)多值属性对应的方法
CFTypeRef ABMultiValueCopyValueAtIndex (
ABMultiValueRef multiValue,
CFIndex index
);
返回对应位置处的属性值
CFStringRef ABMultiValueCopyLabelAtIndex (
ABMultiValueRef multiValue,
CFIndex index
);
返回对应位置处的属性标识
CFArrayRef ABMultiValueCopyArrayOfAllValues (
ABMultiValueRef multiValue
);
返回包含所有属性值的数组
CFIndex ABMultiValueGetCount (
ABMultiValueRef multiValue
);
返回属性值的个数
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
本文标题:获取通讯录内容-创新互联
URL标题:http://azwzsj.com/article/dpsdip.html