如何使用iOS AddressBook

來源:互聯網
上載者:User

一.基本知識

和通訊錄中連絡人相關的應用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

);

返回屬性值的個數

原文地址:http://www.cnblogs.com/y041039/archive/2012/03/22/2411771.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.