【鏈接】CNContact對通訊錄的基本使用(第二篇)
http://www.cnblogs.com/lantu1989/p/5469346.html
**
* 注意: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