Contacts and ContactsUI 通讯录简单使用一
Hello Contacts,say goodbye AddressBook!
Contacts.framework 框架针对线程安全的只读使用进行了优化。9.0以上才可以。
contact class 是线程安全的,contact class is like NSDictionary 并且有可变子类CNMutableContact。 you can create your own custom labels.
不说多,先显示一下 你的通讯录
CNContactPickerViewController 为显示通讯录的ViewController
CNContactPickerDelegate 为代理 引入Contacts 和ContactsUI
#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
@interface ViewController ()<CNContactPickerDelegate,CNContactViewControllerDelegate>
@end
- (void)viewDidLoad {
[super viewDidLoad];
简单显示 你的通讯录
CNContactPickerViewController *contactPickerViewController = [[CNContactPickerViewController alloc] init];
// 设置代理 contactPickerViewController.delegate=self;
// 显示联系人窗口视图
[self presentViewController:contactPickerViewController animated:YES completion:nil];
}
当然啦,不能只显示通讯录。 按钮时间都需要代理回调。
//点击联系人控制器的Cancel按钮执行该方法
- (void)contactPickerDidCancel:(CNContactPickerViewController*)picker{
NSLog(@"取消");
}
// 选中联系人时执行该方法
- (void)contactPicker:(CNContactPickerViewController*)picker didSelectContact:(CNContact*)contact{
NSLog(@"联系人的资料:%@",contact);
[self dismissViewControllerAnimated:YES completion:nil];
//显示联系人详细页面. 这个页面需要CNContactViewControllerDelegate 代理
CNContactViewController *contactController = [CNContactViewController viewControllerForNewContact:contact];
contactController.delegate=self;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
[self settingNavBarForNavController:navController];
[self presentViewController:navController animated:YES completion:nil];
}
//当用户选择属性时调用
- (BOOL)contactViewController:(CNContactViewController*)viewController shouldPerformDefaultActionForContactProperty:(CNContactProperty*)property{
return NO;
}
//该协议是在创建新的名片界面点击取消或者确定后的回调
- (void)contactViewController:(CNContactViewController*)viewController didCompleteWithContact:(nullableCNContact*)contact{
[viewControllerdismissViewControllerAnimated:YES completion:nil];
}