国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS-----使用AddressBookUI管理聯系人

2019-11-14 17:53:01
字體:
來源:轉載
供稿:網友

使用AddressBookUI管理聯系人

iOS SDK為管理地址簿提供的視圖控制器位于AddressBookUI框架內。總結來說,AddressBookUI框架提供了如下特殊的視圖控制器。

ABPersonViewController

用于顯示指定聯系人數據的試圖控制器

ABNewPersonViewController

用于新增聯系人的視圖控制器

ABPeoplePickerViewController

用于讓用戶選擇某個聯系人或選擇某個聯系人信息項的視圖控制器

ABUnknownPersonViewController

用于通過一組聯系人信息來添加聯系人記錄,程序可以將該視圖控制器顯示的聯系人信息存入手機通訊錄中。實際上,該視圖控制器可以對聯系人數據啟動這些標準動作:手機通話、發送通信、新增聯系人、添加到已有聯系人中。

這4個視圖控制器的使用方式基本相同,都是先創建視圖控制器的實例,并設置相關屬性 -----關鍵是指定一個xxxDelegate屬性,該屬性值是一個實現特定協議的對象,該協議中定義的方法負責處理用戶對視圖控制器執行的操作。

4個視圖控制器對應的Delegate協議如下:

ABPersonViewControllerDelegate

該協議包含一個必須實現的personViewController:shouldPerformDefaultActionForPerson:PRoperty:identifier:方法,當用戶選中某個聯系人的某個屬性時激發該方法.如果希望用戶選擇該屬性時自動執行它的默認動作,該方法應該返回YES;否則返回NO.

ABPeoplePickerViewControllerDelegate

該協議包含如下3個必須實現的方法.

        - peoplePickerNavigationController:shouldContinueAfterSelectingPerson:當用戶通過該協議所對應的視圖控制器選中某個聯系人后激發該方法.如果希望用戶選擇該聯系人后自動執行默認的動作,該方法應該返回YES;否則返回NO.

        - peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier::當用戶選中某個聯系人的某個屬性后激發該方法. 如果希望用戶選擇該聯系人后自動執行默認的動作,該方法應該返回YES;否則返回NO.

        peoplePickerNavigationControllerDidCancel::當用戶取消選擇時激發該方法

 

ABUnknownPersonViewControllerDelegate

該協議包含一個必須實現的unknownPersonViewController:didResolveToPerson:方法,當用戶將未知聯系人數據添加為新的聯系人或保存到已有聯系人中時激發該方法

這4個視圖控制器還可以設置如下常用屬性(有些屬性不是每個控制器都支持的,具體以API文檔為準).

displayedPerson:

該屬性設置或返回該視圖控制器顯示的聯系人記錄。該屬性值是一個ABRecordRef變量

displayedProperties:

該屬性設置或返回視圖控制器可以顯示的所有屬性。該屬性值是一個NSArray集合,包含程序希望顯示的屬性。

addressBook:

該屬性設置或返回該視圖控制器關聯的地址簿,該屬性值是一個ABAddressBookRef變量

allowEditing:

該屬性設置或返回是否允許編輯聯系人的信息。

allowsAddingToAddressBook:

該屬性設置或返回是否允許將聯系人信息添加到地址簿中。

 

 

使用ABNewPersonViewController添加聯系人

addContact:方法將會使用ABNewPersonViewController添加聯系人;unknown:方法將會使用ABUnknownPersonViewController顯示未知聯系人;pick:方法將會使用ABPersonPickerNavigationController讓用戶從聯系人列表中選擇聯系人;view:方法將會使用ABPersonViewController顯示指定聯系人.

- (IBAction)addContact:(id)sender

{

  // 創建ABNewPersonViewController視圖控制器

   ABNewPersonViewController *controller = [[ABNewPersonViewController alloc] init];

   //  設置newPersonViewDelegate屬性為當前視圖控制器自身

   controller.newPersonViewDelegate = self;

   //  使用UINavigationController包裝ABNewPersonViewController

  UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];

  [self presentViewController:nav  animated: YES  completion: NULL];

}

注意

為了讓ABNewPersonViewController正常工作,通常需要使用UINavigationController來包裝它

代碼片段

//  ABPersonViewControllerDelegate協議中的方法,當用戶單擊”保存”或”取消”按鈕時激發該方法

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person

{

// 如果用戶單擊”保存”按鈕,person代表剛保存的記錄

// 如果用戶單擊”取消”按鈕,person為NULL

if(person)

{

   // 取出person記錄中kABPersonFirstNameProperty屬性的值

   NSString *firstName = (__bridge  NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);

   [self  showAlert:[NSString *stringWithFormat:@” [%@]聯系人被保存 ”,  firstName]];

}

// 隱藏包裝newPersonViewController的導航控制器

[newPersonViewController.navigationController dismissViewControllerAnimated:YES completion:NULL];

 

}

使用ABUnknownPersonViewController顯示未知聯系人

系統將會激發unknown:事件處理方法,該方法將會使用ABUnknownPersonViewController顯示一條剛剛新建的聯系人的信息.下面是unknown:事件處理方法的代碼

 1 - (IBAction)unknown:(id)sender{ 2  3   ABUnknownPersonViewController* controller = [[ABUnknownPersonViewController alloc] init ]; 4  5 // 設置unknownPersonViewDelegate屬性為當前視圖控制器自身 6  7 controller. unknownPersonViewDelegate = self; 8  9 // 設置顯示標準動作10 11 controller.allowsActions = YES;12 13 // 設置允許將該位置的聯系人添加到地址簿14 15 controller.allowsAddingToAddressBook = YES;16 17 // 創建一條新的記錄18 19 ABRecordRef record = ABPersonCreate();20 21 // 為ABRecordRef記錄設置kABPersonFirstNameProperty屬性22 23 ABRecordSetValue(record,  kABPersonFirstNameProperty,  (__bridge CFTypeRef)@”西游記”, NULL);24 25 // 為ABRecordRef記錄設置kABPersonLastNameProperty屬性26 27 ABRecordSetValue(record,  kABPersonLastNameProperty,  (__bridge CFTypeRef)@”baidu.com”, NULL);28 29 // 添加聯系人電話號碼以及該號碼對應的標簽30 31 ABMutableMultiValueRef  multi = ABMultiValueCreateMutable(kABPersonPhoneProperty);32 33 ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)@”02028309358”, (__bridge CFTypeRef)@”工作”, NULL);34 35 ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)@”13500008888”, (__bridge CFTypeRef)@”手機”, NULL);36 37 // 為ABRecordRef記錄設置kABPersonPhoneProperty屬性38 39 ABRecordSetValue(record,  kABPersonPhoneProperty, multi , NULL);40 41 // 設置controller顯示record記錄42 43 controller.displayedPerson = record;44 45 // 使用UINavigationController包裝ABUnknownPersonViewController46 47 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];48 49 [self presentViewController:nav animated: YES  completion:NULL];50 51 }52 53//  注意:為了讓ABUnknownPersonViewController正常工作,通常需要使用UINavigationController來包裝它.54 55 // 視圖控制器設置為ABUnknownPersonViewController的unknownPersonViewDelegate屬性值,因此在視圖控制器中必須實現ABUnknownPersonViewControllerDelegate協議,并實現如下方法56 57 // ABUnknownPersonViewControllerDelegate協議中的方法58 59 // 當用戶把這條位置聯系人信息添加到某個聯系人上,或添加到地址簿中時將會激發該方法60 61 - (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonView  didResolveToPerson:(ABRecordRef)person62 63 {64 65    // person代表用戶剛剛保存的記錄66 67   if(person)68 69 {70 71 //  取出person記錄中kABPersonFirstNameProperty屬性值72 73 NSString *firstName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);74 75 [self  showAlert:[NSString stringWithFormat:@”[%@]聯系人保存”, firstName]];76 77 }78 79 // 隱藏包裝unknownPersonView的導航控制器80 81 [unknownPersonView.navigationController  dismissViewControllerAnimated:YES completion:NULL];82 83 }

 

使用ABPeoplePickerNavigationController選擇聯系人

用戶單擊界面上的”選擇聯系人”按鈕,系統將會激發pick:事件處理方法,該方法將會使用ABPeoplePickerNavigationController顯示聯系人列表供用戶選擇.下面是pick:事件處理方法的代碼

 1 - (IBAction)pick:(id)sender 2  3 { 4  5    ABPeoplePickerNavigationController* controller = [[ABPepplePickerNavigationController alloc] init]; 6  7    // 設置peoplePickerDelegate屬性為當前視圖控制器自身 8  9    controller.peoplePickerDelegate = self;10 11    [self presentViewController:controller animated:YES completion:NULL];12 13 }14 15 從上面的代碼可以看出,ABPeoplePickerNavigationController的用法更為簡單------創建該類的實例,設置peoplePickerDelegate屬性,然后將它顯示出來即可.16 17 實現ABPeoplePickerNavigationControllerDelegate協議,并實現如下方法18 19 - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person20 21 {22 23    // 取消顯示peoplePicker視圖控制器24 25    // 當peoplePicker視圖控制器26 27    [peoplePicker dismissViewControllerAnimated:YES completion:^{28 29   // 創建ABPersonViewController視圖控制器30 31   // 取出person記錄中kABPersonFirstNameProperty屬性值32 33   NSString *firstName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);34 35   [self showAlert:[NSString stringWithFormat:@”您選中了[%@]聯系人”, firstName]];36 37 }];38 39 return NO;40 41 }42 43 - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePickershouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier44 45 {46 47    return NO;48 49 }50 51 - (void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController*)peoplePicker52 53 {54 55   NSLog(@”用戶取消了選擇”);56 57 }

 

使用ABPersonViewController顯示指定聯系人

當用戶單擊程序界面上的”查看ID為1的聯系人”按鈕時,程序將會激發view:方法,該方法將會使用ABPersonViewController顯示指定聯系人.限免是view:事件處理方法的代碼.

 1 - (IBAction)view:(id)sender 2  3 { 4  5   ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, NULL); 6  7   // 獲取ID為1的聯系人記錄 8  9   ABRecordRef rec = ABAddressBookGetPersonWithRecordID(ab, 1);10 11   // 創建ABPersonViewController視圖控制器12 13  ABPersonViewController* controller = [[ABPersonViewController alloc] init];14 15  controller.allowsActions = YES;16 17  controller.allowsEditing = YES;18 19  controller.personViewDelegate = self;20 21  // 顯示用戶選中的聯系人記錄22 23 controller.displayedPerson = rec;24 25 // 使用UINavigationController包裝ABPersonViewController26 27 UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:controller];28 29 [self persentViewController: nav animated: YES completion: NULL];30 31 }32 33 實現ABPersonViewControllerDelegate協議,并實現該協議中定義的如下方法.34 35 // 當用戶選中某個屬性時激發該方法36 37  38 39 - (BOOL)peopleViewController:(ABPeopleViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier40 41 {42 43   [self showAlert:[NSString stringWithFormat:@”名字為:%@”, (__bridge NSString*)ABRecordCopyCompositeName(person)]];44 45   [personViewController.navigationController dismissViewControllerAnimated:YES completion:NULL];46 47  return YES;48 49 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景谷| 株洲市| 浦县| 叙永县| 濮阳市| 南城县| 攀枝花市| 惠来县| 特克斯县| 冷水江市| 嘉鱼县| 安康市| 吉水县| 西吉县| 内丘县| 达日县| 南丰县| 阳谷县| 凌海市| 阳曲县| 星子县| 洛南县| 平度市| 磐安县| 普格县| 长丰县| 洞头县| 波密县| 武山县| 喀什市| 新源县| 酒泉市| 松溪县| 孟州市| 塘沽区| 新平| 丽江市| 保山市| 泗水县| 汉寿县| 宣武区|