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];
}
网友评论