iOS開發iOS9.0以上通訊錄
前段時間公司要求寫一個通訊錄,本想着通訊錄這玩意還是比較好整的,需求是在網頁内監測URL彈出系統通訊錄。而當我入手寫通訊錄的時候發現,原來用到的AddressBook/AddressBook 和 AddressBookUI/AddressBookUI 這兩個架構引入之後,一片飄黃,各種小黃歎号,這兩個架構在iOS9.0之後被棄用了,改為使用Contacts/Contacts 這個新架構了,這個新架構要比原來的架構好用很多,很多方法都是我們熟悉的調用方式。話不多說了,上代碼!
首先得導入兩個架構 ContactsUI.framework和 Contacts.framework。導入方法,看下圖:
//引用頭檔案
#import <ContactsUI/ContactsUI.h>
#import <Contacts/Contacts.h>
@interface ViewController ()<CNContactPickerDelegate>
@property(nonatomic,strong)CNContactPickerViewController *peopleAddressBook;
@end
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithRed:/ green:/ blue:/ alpha:];
UIButton *obtainAddressBook = [[UIButton alloc] init];
obtainAddressBook.backgroundColor = [UIColor purpleColor];
obtainAddressBook.frame = CGRectMake(, , , );
[obtainAddressBook setTitle:@"打開通訊錄" forState:UIControlStateNormal];
[obtainAddressBook addTarget:self action:@selector(openAddressBookClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:obtainAddressBook];
UIButton *addPerson = [[UIButton alloc] init];
addPerson.backgroundColor = [UIColor grayColor];
addPerson.frame = CGRectMake(, , , );
[addPerson setTitle:@"添加聯系人" forState:UIControlStateNormal];
[addPerson addTarget:self action:@selector(addPersonClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:addPerson];
}
//打開通訊錄按鈕點選方法
- (void)openAddressBookClick
{
self.peopleAddressBook = [[CNContactPickerViewController alloc] init];
self.peopleAddressBook.delegate = self;
[self presentViewController:self.peopleAddressBook animated:YES completion:nil];
}
CNContactPickerDelegate提供了個代理方法
//這個方法是點選通訊錄完成按鈕的時候會調用
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker;
//這兩個方法隻要實作其中的一個就好,兩個都實作詳情頁出不來,具體原因我也沒想明白,有懂得朋友可以留言教教我
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty;
//剩下的這兩個方法可以看出來用法和前兩個雷同,不做介紹了
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact*> *)contacts;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperties:(NSArray<CNContactProperty*> *)contactProperties;
實作代理方法
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty
{
CNPhoneNumber *numble = contactProperty.value;
// NSLog(@"PhoneNumber:%@",numble.stringValue);
// NSLog(@"PhoneNumber:%@",contactProperty.contact);
NSString *phoneNumble = numble.stringValue;
NSString *firstName = contactProperty.contact.givenName;
NSString *familyName = contactProperty.contact.familyName;
NSString *name = [NSString stringWithFormat:@"%@%@",familyName,firstName];
NSLog(@"name === %@",name);
NSLog(@"phonenumble === %@",phoneNumble);
}
還有更深入了解的朋友可以留言探讨,寫的不是很好,而且也是為了實作當下需求,看了系統内容寫的。