亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

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

使用AddressBookUI管理聯系人

iOS SDK為管理地址簿提供的視圖控制器位于AddressBookUI框架內??偨Y來說,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 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美va欧美va香蕉在| 91在线视频九色| 在线观看91久久久久久| 久久久久日韩精品久久久男男| 深夜福利91大全| 亚洲夜晚福利在线观看| 色777狠狠综合秋免鲁丝| 欧美性生交大片免费| 国产精品自产拍在线观看| 日韩av中文字幕在线| 色妞欧美日韩在线| 国产精品手机播放| 日韩中文字幕网址| 亚洲新声在线观看| 亚洲欧美日韩久久久久久| 日韩国产精品视频| 久久精品人人爽| 91夜夜揉人人捏人人添红杏| 亚洲电影免费在线观看| 久久久999精品视频| 国产精品高清免费在线观看| 亚洲伊人一本大道中文字幕| 国产婷婷97碰碰久久人人蜜臀| 日韩成人黄色av| 久久国产精品偷| 欧美成人激情视频| 国产女人精品视频| 日韩中文字幕久久| 成人精品一区二区三区| 亚洲www永久成人夜色| 懂色av影视一区二区三区| www.欧美三级电影.com| 麻豆国产va免费精品高清在线| 91在线免费看网站| 91在线视频成人| 国产精品尤物福利片在线观看| 美女啪啪无遮挡免费久久网站| 日韩中文字幕在线观看| 午夜剧场成人观在线视频免费观看| 亚洲人成网站色ww在线| 日韩中文有码在线视频| 91免费视频国产| 久久精品成人动漫| 懂色av影视一区二区三区| 亚洲天堂影视av| 97精品免费视频| 精品国产1区2区| 不卡av电影院| 日韩av黄色在线观看| 精品视频在线播放免| 久久精品国产一区二区三区| 欧美激情视频在线免费观看 欧美视频免费一| 国产一区二区丝袜| 欧美在线视频网| 亚洲欧美国产精品久久久久久久| 在线视频国产日韩| 国产欧美日韩中文| 91日韩在线播放| 中文字幕日韩视频| 国产精品麻豆va在线播放| 欧美一性一乱一交一视频| 久久影院资源站| 国产一区二区三区高清在线观看| 日韩中文综合网| 国产精品久久久久久亚洲影视| 久久精品国产久精国产一老狼| 黑人与娇小精品av专区| 日韩av大片在线| 欧美日韩在线视频一区二区| 久久久久久国产精品三级玉女聊斋| 久久久久久久久爱| www.亚洲免费视频| 成人xvideos免费视频| 欧美激情国产日韩精品一区18| 中文字幕国内精品| 午夜精品久久久久久99热软件| 国产一区二区黑人欧美xxxx| 日韩精品极品毛片系列视频| 国产精品视频一区二区三区四| 亚洲最大福利视频网站| 欧美日韩亚洲精品内裤| 国产精品久久久久久久一区探花| 亚洲图片欧洲图片av| 成人免费午夜电影| 欧美日韩一区二区三区在线免费观看| 精品国产31久久久久久| 美女福利精品视频| 亚洲精品国产综合久久| 亚洲国产私拍精品国模在线观看| www国产91| 亚洲а∨天堂久久精品喷水| 国产69精品99久久久久久宅男| 亚州欧美日韩中文视频| 欧美精品18videos性欧美| 中文字幕欧美精品日韩中文字幕| 91在线视频成人| 欧美一区二区影院| 在线成人免费网站| 亚洲国产成人精品一区二区| 日韩av电影国产| 久久青草精品视频免费观看| 中文字幕欧美国内| 国产精品日韩精品| 黑人精品xxx一区| 91在线观看免费观看| 精品国产乱码久久久久久虫虫漫画| 国产一区二区免费| 亚洲片国产一区一级在线观看| 亚洲美女av电影| 成人国产在线激情| 亚洲美女在线看| 国产精品久久久久久婷婷天堂| 蜜臀久久99精品久久久无需会员| 国内外成人免费激情在线视频| 日韩av中文字幕在线免费观看| 久久国产精品亚洲| 亚洲精品资源在线| 91在线色戒在线| 亚洲欧美日韩一区二区在线| 日韩女在线观看| 最近2019年日本中文免费字幕| 九色成人免费视频| 国产精品伦子伦免费视频| 久久久久久91香蕉国产| 色狠狠久久aa北条麻妃| 69久久夜色精品国产7777| 久久这里只有精品99| 国产91av在线| 国产成人啪精品视频免费网| 日本人成精品视频在线| 成人网在线观看| 精品人伦一区二区三区蜜桃网站| 在线观看精品自拍私拍| 91大神在线播放精品| 国产ts一区二区| 日韩一区av在线| 国产一区二区三区在线| 亚洲精品久久久一区二区三区| 美女999久久久精品视频| 成人免费网站在线| 国产99视频精品免视看7| 亚洲精品国产精品自产a区红杏吧| 亚洲一区二区三区在线免费观看| 欧美激情网站在线观看| 69视频在线免费观看| 亚洲精品短视频| 欧美激情精品久久久久久蜜臀| 亚洲国产福利在线| 精品久久久久人成| 欧美孕妇孕交黑巨大网站| 18一19gay欧美视频网站| 深夜福利一区二区| 亚洲国产精品美女| 川上优av一区二区线观看| 日韩av大片免费看| 亚洲国产欧美在线成人app| 久久久久久久久亚洲| 亚洲人高潮女人毛茸茸| 日日噜噜噜夜夜爽亚洲精品| 色偷偷91综合久久噜噜| 欧美黑人一级爽快片淫片高清| 欧美精品在线观看| 欧美激情一级精品国产| 在线观看久久久久久|