如何使用iOS AddressBook

原创 2013年12月05日 15:28:30

 

一.基本知识

和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。

二.具体介绍

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的方法介绍

(a)peoplePickerNavigationControllerDidCancel:当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。

(b)peoplePickerNavigationController:shouldContinueAfterSelectingPerson: 当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。如果希望可以继续显示这个联系人更具体的信息,则return YES。否则取消整个通讯录页面的显示并return NO。

(c)peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: 如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。如果 希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则return YES。否则取消整个通讯录页面的显示并return NO。

例子:

(a)示例:

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {

  //
assigning control back to the main controller
  [picker dismissModalViewControllerAnimated:YES];
}

 (b)示例:

复制代码
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{


  //获取联系人姓名
  name.text = (NSString*)ABRecordCopyCompositeName(person);


  //获取联系人电话

  ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);

  NSMutableArray *phones = [[NSMutableArray alloc] init];

  int i;

 for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++)
 {

  NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];

  NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(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*)ABMultiValueCopyValueAtIndex(emailMulti, i) autorelease];

  [emails addObject:emailAdress];
}

email.text=@"";

if([emails count]>0)

{
  NSString *emailFirst=[emails objectAtIndex:0];
  email.text = emailFirst;
  //NSLog(emailFirst);
}

[peoplePicker dismissModalViewControllerAnimated:YES];

return NO;

}
复制代码

 (c)示例

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(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 ABRecordCopyCompositeName (

   ABRecordRef record

);

获取联系人完整的姓名。

(c)多值属性对应的方法

CFTypeRef ABMultiValueCopyValueAtIndex (

   ABMultiValueRef multiValue,

   CFIndex index

);

返回对应位置处的属性值

CFStringRef ABMultiValueCopyLabelAtIndex (

   ABMultiValueRef multiValue,

   CFIndex index

);

返回对应位置处的属性标识

CFArrayRef ABMultiValueCopyArrayOfAllValues (

   ABMultiValueRef multiValue

);

返回包含所有属性值的数组

CFIndex ABMultiValueGetCount (

   ABMultiValueRef multiValue

);

返回属性值的个数


相关文章推荐

ABAddressBook & AddressBook UI 文件介绍(IOS开发)

原文链接地址:http://what-when-how.com/ios-4/accessing-the-address-book-ios-4/ 下图为 文章的核心部分。介绍了两个 ios add...

AddressBook UI 官方demo (IOS)

对于系统的contact 联系簿的ViewController 如何使用,下面又一个官方的demo,大家可以拿去看看。 这个东西,找了一段时间。其实不是很难,配合自己写的数据模型,很容易就能做出...

AddressBook 地址簿  (电话簿) 访问与修改-IOS开发

访问地址簿和单个联系人数据的接口是基于C语言的函数,接口传递对地址簿各种对象的引用作为参数。管理地址簿中条目的基类对象是 ABRecord。一个 ABRecord 可以表示一个人 或者一个群体 ABG...
  • iukey
  • iukey
  • 2012年03月12日 09:59
  • 17781

IOS AddressBook 对contact处理,一般常用到的几个文件(保存,删除,属性获取,group等)

转载请说明(谢谢) http://blog.csdn.net/a21064346/article/details/8016935 点击打开链接 今天准备 做一个和系统自带的 co...

ios addressbook

一.基本知识 和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问...
  • tankgzh
  • tankgzh
  • 2014年08月06日 10:53
  • 191

iOS编程-------AddressBook_自定义cell 自定义单元格通讯录

// // AppDelegate.h // Contact // // Created by l on 15/9/3. // Copyright (c) 2015年 . All rights...

iOS开发------获取系统联系人(AddressBook篇)

AddressBook是Apple提供给我们获取系统联系人的一个很方便类库,与其说方便,其实刚开始还是比较崩溃的,从开发文档来看,它还是偏向于C语言,并且不在ARC的控制之下,虽然在iOS9.0之后会...

iOS AddressBook

一.基本知识 和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显...
  • a_ss_a
  • a_ss_a
  • 2014年08月02日 09:41
  • 488

AddressBook 地址簿 (电话簿) 访问与修改-IOS开发

原文http://blog.csdn.net/iukey/article/details/7343650 访问地址簿和单个联系人数据的接口是基于C语言的函数,接口传递对地址簿各种对象的引用作为参...

关于ios9中得AddressBook和AddressBookUI框架过时问题

ios9的更新后,AddressBook.framework和AddressBookUI.framework几乎是全部过时,其不支持OC。用Contacts.framework和ContactsUI....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使用iOS AddressBook
举报原因:
原因补充:

(最多只允许输入30个字)