天天看點

iOS開發iOS9.0調用系統通訊錄

iOS開發iOS9.0以上通訊錄

前段時間公司要求寫一個通訊錄,本想着通訊錄這玩意還是比較好整的,需求是在網頁内監測URL彈出系統通訊錄。而當我入手寫通訊錄的時候發現,原來用到的AddressBook/AddressBook 和 AddressBookUI/AddressBookUI 這兩個架構引入之後,一片飄黃,各種小黃歎号,這兩個架構在iOS9.0之後被棄用了,改為使用Contacts/Contacts 這個新架構了,這個新架構要比原來的架構好用很多,很多方法都是我們熟悉的調用方式。話不多說了,上代碼!

首先得導入兩個架構 ContactsUI.framework和 Contacts.framework。導入方法,看下圖:

iOS開發iOS9.0調用系統通訊錄
//引用頭檔案
#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);


}
           

還有更深入了解的朋友可以留言探讨,寫的不是很好,而且也是為了實作當下需求,看了系統内容寫的。