/** * 注意:iOS9才有能使用 * 首先在工程里導入ContactsUI.framework和Contacts.framework兩個框架 * * * 源代碼的鏈接地址 * 鏈接: http://pan.baidu.com/s/1jHDsvGU 密碼: 7tfj */ #import "RootViewController.h" #import <Contacts/Contacts.h> #import <ContactsUI/ContactsUI.h> @interface RootViewController ()<CNContactPickerDelegate> { UITableView *_contactTableView; NSMutableArray *data; } @end @implementation RootViewController - (void)loadView{ [super loadView]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(100, 100, 120, 60); [button setTitle:@"顯示聯系人" forState:0]; [button setTitleColor:[UIColor cyanColor] forState:0]; [button addTarget:self action:@selector(showContact:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; } - (void)viewDidLoad { [super viewDidLoad]; // CNMutableContact *contact = [self initializeContact]; //添加聯系人 // [self addContact:contact]; // 查詢 // NSArray *arr = [self queryContactWithName:@"雨路"]; //將不可變的CNContact轉成CNMutableContact,便可執行以下操作 // CNMutableContact *contact = [arr[1] mutableCopy]; // 更新 // contact.givenName = @"LF"; // [self updateContact:contact]; // 刪除 // [self deleteContact:contact]; //添加群組 // [self addGroupWithName:@"friend"]; // NSArray *array = [self queryGroup]; // NSLog(@"==%@",array); // 刪除group操作 // CNMutableGroup *group = [array[3] mutableCopy]; // [self deleteWithGroup:group]; // 更新group // CNMutableGroup *group = [array[3] mutableCopy]; // group.name = @"i need you"; // [self updateGroup:group]; // 向group添加成員 // NSArray *results = [self queryContactWithName:@"甘"]; // CNGroup *group = array[3]; // [self addMemberWithContact:results[0] toGroup:group]; // 在group里刪除成員 // NSArray *results = [self queryContactWithName:@"甘"]; // CNGroup *group = array[3]; // [self deleteMemberWithContact:results[0] toGroup:group]; } /** * 在group里刪除成員 * * @param contact 被刪除的聯系人 * @param group 在該group里刪除聯系人 */ - (void)deleteMemberWithContact:(CNContact *)contact toGroup:(CNGroup *)group{ CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest removeMember:contact fromGroup:group]; // 寫入 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 向group添加成員 * * @param contact 被添加的聯系人 * @param group 添加到該group */ - (void)addMemberWithContact:(CNContact *)contact toGroup:(CNGroup *)group{ CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest addMember:contact toGroup:group]; // 寫入 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 更新group * * @param group 被更新的group */ - (void)updateGroup:(CNMutableGroup *)group{ CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest updateGroup:group]; // 寫入 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 刪除group操作 * * @param group 被刪除的group */ - (void)deleteWithGroup:(CNMutableGroup *)group{ CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest deleteGroup:group]; // 寫入 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 查詢 * * @return 返回數組 */ - (NSArray *)queryGroup{ CNContactStore *store = [[CNContactStore alloc] init]; // 查詢所有的group(predicate參數為空時會查詢所有的group) NSArray *arr = [store groupsMatchingPredicate:nil error:nil]; return arr; } /** * 添加群組 * * @param name 群組的名稱 */ - (void)addGroupWithName:(NSString *)name{ CNMutableGroup *group = [[CNMutableGroup alloc] init]; group.name = name; CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest addGroup:group toContainerWithIdentifier:nil]; // 寫入 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 查詢操作 * * @return 返回數組 */ - (NSArray *)queryContactWithName:(NSString *)name{ CNContactStore *store = [[CNContactStore alloc] init]; // 檢索條件 NSPredicate *predicate = [CNContact predicateForContactsMatchingName:name]; // 提取數據 (keysToFetch:@[CNContactGivenNameKey]是設置提取聯系人的哪些數據) NSArray *contact = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil]; return contact; } /** * 更新聯系人 * * @param contact 被更新的聯系人 */ - (void)updateContact:(CNMutableContact *)contact{ // 創建聯系人請求 CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest updateContact:contact]; // 重新寫入 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 刪除聯系人 * * @param contact 被刪除的聯系人 */ - (void)deleteContact:(CNMutableContact *)contact{ // 創建聯系人請求 CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest deleteContact:contact]; // 寫入操作 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 添加聯系人 * * @param contact 聯系人 */ - (void)addContact:(CNMutableContact *)contact{ // 創建聯系人請求 CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; [saveRequest addContact:contact toContainerWithIdentifier:nil]; // 寫入聯系人 CNContactStore *store = [[CNContactStore alloc] init]; [store executeSaveRequest:saveRequest error:nil]; } /** * 設置聯系人的基本屬性 * * @return 返回聯系人的對象 */ - (CNMutableContact *)initializeContact{ // 創建聯系人對象 CNMutableContact *contact = [[CNMutableContact alloc] init]; // 設置聯系人的頭像 contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"animal"]); // 設置聯系人姓名 contact.givenName = @"雨路"; // 設置姓氏 contact.familyName = @"甘"; // 設置聯系人郵箱 CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"12345qq.com"]; CNLabeledValue *workEmail = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"32467@sina.cn"]; CNLabeledValue *otherEmail = [CNLabeledValue labeledValueWithLabel:CNLabelOther value:@"lanaj.com"]; contact.emailAddresses = @[homeEmail,workEmail,otherEmail]; // 設置機構名 contact.organizationName = @"互聯網"; // 設置部門 contact.departmentName = @"物流"; // 設置工作的名稱 contact.jobTitle = @"ios"; // 設置社會的簡述 CNSocialProfile *profile = [[CNSocialProfile alloc] initWithUrlString:@"12306.cn" username:@"lily" userIdentifier:nil service:@"IT行業"]; CNLabeledValue *socialProfile = [CNLabeledValue labeledValueWithLabel:CNSocialProfileServiceGameCenter value:profile]; contact.socialProfiles = @[socialProfile]; // 設置電話號碼 CNPhoneNumber *mobileNumber = [[CNPhoneNumber alloc] initWithStringValue:@"15201596724"]; CNLabeledValue *mobilePhone = [[CNLabeledValue alloc] initWithLabel:CNLabelPhoneNumberMobile value:mobileNumber]; contact.phoneNumbers = @[mobilePhone]; // 設置與聯系人的關系 CNContactRelation *friend = [[CNContactRelation alloc] initWithName:@"好朋友"]; CNLabeledValue *relation = [CNLabeledValue labeledValueWithLabel:CNLabelContactRelationFriend value:friend]; contact.contactRelations = @[relation]; // 設置生日 NSDateComponents *birthday = [[NSDateComponents alloc] init]; birthday.day = 6; birthday.month = 5; birthday.year = 2000; contact.birthday = birthday; return contact; } /** * 顯示聯系人 */ - (void)showContact:(UIButton *)sender{ // 初始化CNContactPickerViewController CNContactPickerViewController *contactPickerViewController = [[CNContactPickerViewController alloc] init]; // 設置代理 contactPickerViewController.delegate = self; // 顯示聯系人窗口視圖 [self presentViewController:contactPickerViewController animated:YES completion:nil]; } #pragma mark -- CNContactPickerDelegate 代理 -- /** * 點擊聯系人控制器的Cancel按鈕執行該方法 * * @param picker 聯系人控制器 */ - (void)contactPickerDidCancel:(CNContactPickerViewController *)picker{ NSLog(@"取消"); } /** * 選中聯系人時執行該方法 * * @param picker 聯系人控制器 * @param contact 聯系人 */ - (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{ NSLog(@"聯系人的資料:%@",contact); [self dismissViewControllerAnimated:YES completion:nil]; //顯示聯系人詳細頁面 CNContactViewController *contactVC = [CNContactViewController viewControllerForContact:contact]; [self presentViewController:contactVC animated:YES completion:nil]; } @end