• 所需框架
  1. #import <ContactsUI/ContactsUI.h>
  • 遵循代理
  1. CNContactPickerDelegate
  • 调用通讯录

    • 如果在iOS10的机器上调用以前的ABPeoplePickerNavigationController老方法将直接崩溃.
  1. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  2. //iOS 10
  3. // AB_DEPRECATED("Use CNContactPickerViewController from ContactsUI.framework instead")
  4. CNContactPickerViewController * contactVc = [CNContactPickerViewController new];
  5. contactVc.delegate = self;
  6. [self presentViewController:contactVc animated:YES completion:^{
  7. }];
  8. }
  • 选择完成代理回调
  1. #pragma mark - 用户点击联系人获取方法 两个方法都写只调用此方法
  2. -(void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
  3. // NSLog(@"contact : %@",contact);
  4. // 姓氏 名字
  5. NSLog(@"name:%@%@",contact.familyName,contact.givenName);
  6. //公司名
  7. NSLog(@"公司: %@",contact.organizationName);
  8. //获取通讯录某个人所有电话并存入数组中 需要哪个取哪个
  9. NSMutableArray * arrMPhoneNums = [NSMutableArray array];
  10. for (CNLabeledValue * labValue in contact.phoneNumbers) {
  11. NSString * strPhoneNums = [labValue.value stringValue];
  12. NSLog(@"所有电话是: %@",strPhoneNums);
  13. [arrMPhoneNums addObject:strPhoneNums];
  14. }
  15. //所有邮件地址数组
  16. NSMutableArray * arrMEmails = [NSMutableArray array];
  17. for (CNLabeledValue * labValue in contact.emailAddresses) {
  18. NSLog(@"email : %@",labValue.value);
  19. [arrMEmails addObject:labValue.value];
  20. }
  21. [picker dismissViewControllerAnimated:YES completion:nil];
  22. }
  • 用户点某个联系人进去获取属性调用的方法 例如从通讯录选择联系人打电话两个方法都写只调用上面方法
  1. #pragma mark - 用户点进去获取属性调用方法 例如从通讯录选择联系人打电话两个方法都写只调用上面方法
  2. - (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty{
  3. // NSLog(@"contactProperty : %@",contactProperty);
  4. // NSLog(@"contact : %@",contactProperty.contact);
  5. // NSLog(@"key : %@",contactProperty.key);
  6. // [[UIApplication sharedApplication] openURL:url];
  7. // NSLog(@"identifier : %@",contactProperty.identifier);
  8. // NSLog(@"label : %@",contactProperty.label);
  9. //获得点击的属性,在此进行处理...
  10. NSLog(@"value : %@",[contactProperty.value stringValue]);
  11. [picker dismissViewControllerAnimated:YES completion:nil];
  12. }
  • 取消选择回调
  1. - (void)contactPickerDidCancel:(CNContactPickerViewController *)picker{
  2. [picker dismissViewControllerAnimated:YES completion:nil];
  3. }

iOS10 - 访问系统通讯录新方法的更多相关文章

  1. iOS10 获取系统通讯录新方法

    #import <ContactsUI/ContactsUI.h> 遵循代理 CNContactPickerDelegate 调用通讯录 如果在iOS10的机器上调用以前的ABPeople ...

  2. ios(包括6、7)应用程序引用系统通讯录的方法 [亲测可行]

    由于ios系统对用户隐私的控制,第三方应用程序只能通过苹果官方接口调用系统通讯录,不能像android那样直接操作通讯录数据库.     一般地,使用系统自带通讯录的方法有两种,一种是直接将整个通讯录 ...

  3. iOS开发--系统通讯录的访问与添加联系人

    公司项目有访问通讯录的需求,所以开始了探索之路.从开始的一无所知,到知识的渐渐清晰.这一切要感谢广大无私分享的 “coder”,注:我是尊称的语气! 苹果提供了访问系统通讯录的框架,以便开发者对系统通 ...

  4. iOS:ABPeoplePickerNavigationController系统通讯录使用

    昨天因项目需求要访问系统通讯录获取电话号码,于是乎从一无所知,开始倒腾,倒腾了一下午,总算了弄好了.写这边博客是为了记录一下,自己下一次弄的时候就别在出错了.同时,有和我一样的菜鸟能够避免走一下弯路. ...

  5. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  6. Android项目--浅析系统通讯录中的那些方法

    系统通讯录,以前的版本虽然过时了,不过有些东西还是可以用. 1.开启系统联系人添加 /** 添加联系人 */ Intent intent = new Intent(Intent.ACTION_INSE ...

  7. 网络基础 图解Windows系统下单网卡设置双IP访问不同网段的方法

    图解Windows系统下单网卡设置双IP访问不同网段的方法 by:授客 QQ:1033553122 在Windows系统下即使只有一块网卡,同样可以实现双IP访问不同网段. 例: 外网信息: IP:1 ...

  8. mac常用快捷键,Mac文件重命名快捷键,Mac OS快速访问系统根目录, MacOS 10.11重要数据的存储位置大全

    command+r,相当于F5,刷新页面 command+F5,启动voiceover command+q 关闭当前程序 在Finder中command+/ 打开底部状态栏,可以查看剩余磁盘空间大小 ...

  9. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

随机推荐

  1. Javassist 字节码操作

    1.读写字节码 Javassist是用来处理java字节码的类库.字节码保存在二进制文件中称为类文件.每个类文件夹包括一个java类或接口. Javasssist.CtClass这个类是一个类文件的抽 ...

  2. Compare Version Numbers

    Compare two version numbers version1 and version1. If version1 > version2 return 1, if version1 & ...

  3. js 无缝滚动效果学习

    <!DOCTYPE html> <html> <head> <title>无缝滚动测试</title> <meta http-equi ...

  4. bzoj4364: [IOI2014]wall砖墙

    线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> # ...

  5. BZOJ4563: [Haoi2016]放棋子

    Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...

  6. AT指令(中文详解版)(一)

    一 . 一 般 命 令1.AT+CGMI      给出模块厂商的标识.2.AT+CGMM    获得模块标识.这个命令用来得到支持的频带(GSM 900,DCS 1800    或PCS 1900) ...

  7. C++STL 常用 函数 用法

    学完c++快一年了,感觉很有遗憾,因为一直没有感觉到c++的强大之处,当时最大的感觉就是这个东西的输入输出比C语言要简单好写. 后来我发现了qt,opencv,opengl,原来,c++好玩的狠. 在 ...

  8. 03.深入javascript

    函数返回值 函数返回值和函数传参正好相反,函数传参是我们可以把一些东西传到函数里面去,函数返回值是函数可以把一些东西传到外面来. <script> function show() { re ...

  9. Jingle 相关问题

    1. //page模板默认的相对位置,主要用于开发hybrid应用,实现page的自动装载 basePagePath : 'html/'. 所以所有的section 要放在html文件下面才行

  10. jQueryMobile 网页在UC等游览器上无法正常显示或者是无法自适应设备大小,但在QQ游览器上能正常显示的解决方法

    造成jQueryMobile网页在QQ游览器上能正常显示,在UC等游览器上无法正常显示或者是无法自适应设备大小的解决方法: 在<head>标签间添加<meta name=" ...