有时候APP需要用户输入一位联系人的姓名和电话,除了用户手动输入,一般也允许用户从通讯录中选择一位联系人(图1),下面的代码就是使用系统的<AddressBookUI/AddressBookUI.h>库实现这一需求。

图1

完整代码:

#import "ViewController.h"
#import <AddressBookUI/AddressBookUI.h>@interface ViewController ()<ABPeoplePickerNavigationControllerDelegate>
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;
@property (weak, nonatomic) IBOutlet UITextField *phoneTextField;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];}//用户点击选择按钮
- (IBAction)clickSelect:(UIButton *)sender {ABPeoplePickerNavigationController *picker =[[ABPeoplePickerNavigationController alloc] init];picker.peoplePickerDelegate = self;[self presentViewController:picker animated:YES completion:nil];
}//这个方法在用户取消选择时调用
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{[self dismissViewControllerAnimated:YES completion:^{}];
}//这个方法在用户选择一个联系人后调用
-(void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person{[self displayPerson:person];[self dismissViewControllerAnimated:YES completion:^{}];
}//获得选中person的信息
- (void)displayPerson:(ABRecordRef)person
{NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);NSString *middleName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonMiddleNameProperty);NSString *lastname = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty);NSMutableString *nameStr = [NSMutableString string];if (lastname!=nil) {[nameStr appendString:lastname];}if (middleName!=nil) {[nameStr appendString:middleName];}if (firstName!=nil) {[nameStr appendString:firstName];}NSString* phone = nil;ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,kABPersonPhoneProperty);if (ABMultiValueGetCount(phoneNumbers) > 0) {phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);} else {phone = @"[None]";}//可以把-、+86、空格这些过滤掉NSString *phoneStr = [phone stringByReplacingOccurrencesOfString:@"-" withString:@""];phoneStr = [phoneStr stringByReplacingOccurrencesOfString:@"+86" withString:@""];phoneStr = [phoneStr stringByReplacingOccurrencesOfString:@" " withString:@""];[self.nameTextField setText:nameStr];[self.phoneTextField setText:phoneStr];
}@end

源代码下载:点击打开链接

iOS从通讯录中选择联系人相关推荐

  1. 从通讯录中导入联系人并去重

    首先给出实现完的界面图 上面是给出来的实现结果图. 从本地联系人中导出联系人,需要使用ContentProvider来获取通讯录中的联系人. 从通讯录中获取联系人方法如下: /** 得到手机通讯录联系 ...

  2. 利用aotu.js实现微信自动添加通讯录中的联系人

    微信自动添加通讯录中的联系人 可加V交流:18236478843 /***Author: Niu*/auto.waitFor();//点击添加到通讯录 function click_Add(){if( ...

  3. js php通讯录,基于aotu.js实现微信自动添加通讯录中的联系人功能

    什么是Auto.JS? Auto.JS是Android平台上的JavaScript自动化工具. 它的本质是可执行自己编写的简易Javascript脚本的,尤其可以在开启"无障碍模式" ...

  4. ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7

    2019独角兽企业重金招聘Python工程师标准>>> //获取通讯录中的所有属性,并存储在 textView 中,已检验,切实可行.兼容io6 和 ios 7 ,而且ios7还没有 ...

  5. IOS 获取系统通讯录中的联系人信息

    - (IBAction)getAllContactFromSystem { ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, NUL ...

  6. ios获得通讯录中联系人的所有属性

    ABAddressBookRef addressBook = ABAddressBookCreate();CFArrayRef results = ABAddressBookCopyArrayOfAl ...

  7. html css ios系统字体,让iOS在CSS中选择系统字体Helvetica Neue或San Francisco

    on iOS and OS X by using the "-apple-system" CSS value for the "font-family" CSS ...

  8. iOS.访问通讯录.02.写入联系人

    一.创建联系人 1.创建联系人记录 ABRecord person = ABPersonCreate(); 2.保存或修改单值属性 bool ABRecordSetValue(ABRecordRef ...

  9. 安卓调用手机通讯录选择联系人

    项目需求是从手机通讯录中选择联系人姓名.手机号返回,尝试很多方法未果,终于成功,特此备份. 调起通讯录的方法: Intent jumpIntent = new Intent(Intent.ACTION ...

最新文章

  1. Pinterest 谈实战经验:如何在两年内实现零到数百亿的月访问
  2. 把指定用户的命令写在/home/etc/rc.local中,系统开机时就会自动执行指定用户的命令。
  3. HDOJ 1285 确定比赛名次(拓扑排序)
  4. 摩托罗拉MT788刷机
  5. Unix网络编程---第一次作业
  6. 天津西站,座才几个?
  7. 【交易架构day9】阿里交易系统演进之路
  8. 蜂巢科技获A轮千万美元融资,启明创投领投
  9. 附近的人实现原理详细剖析!
  10. 记阿里巴巴的一次面试,教你怎样应对到来的“金三银四
  11. PostgreSQL集群篇——PostgreSQL的配置文件解析
  12. 怎么看外文文献的影响因子_[转载]如何查找高质量外文文献 - SCI/SSCI/AHCInbs...
  13. MotoSimEG-VRC软件:多机器人信号交互与PLC功能
  14. Redis看这一篇就够了
  15. 听肖邦Chopin: Waltz No.19 in A minor, Op.Posth的美好
  16. FPGA基本引脚知识
  17. Qt中的Resource
  18. 黑马程序员-java-小天教你使用eclipse
  19. 大创:小车运动部分计划及端口(1)
  20. 国际企业邮箱哪个好用?企业邮箱域名怎么修改?

热门文章

  1. Spring框架系列之AOP思想
  2. Outlook接收qq的邮件
  3. Oracle round函数是什么意思?怎么运用?
  4. CvBlobTrackerCC 多目标跟踪算法简析
  5. 【C++】 保存内容到文件工具
  6. Linux环境thinkphp配置以及数据源驱动修改
  7. php比较长的configure
  8. HTML教程-各窗口间相互操作(Frame Target)
  9. 修改Linux内核参数提高服务器并发能力
  10. C++11中std::shared_future的使用