版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WangErice/article/details/51558367
获取手机联系人和通讯录是比较常见的功能,由于iOS8之后获取的方法有所变化,使得获取时方法的兼容性变的并不那么友好,本文对获取单个联系人和完整通讯录的方法进行了简单的封装,用于选择单个联系人和获取通讯录。
注:本文中的方法只针对iOS7.0之后进行兼容,同时需要注意的是除非有特殊需求,否则不要轻易隐性获取用户的通讯录,更不能泄漏用户的个人信息。
1)为了保持实现功能的独立性,避免不必要的外部依赖,我们为UIWindow创建一个Category来现实获取应用中当前正在显示的控制器,然后用该控制器来present出来ABPeoplePickerNavigationController对象。主要实现如下,通过简单递归来查找当前正在显示的控制器。
2)在工程中引入AddressBook.framework和AddressBookUI.framework两个系统框架和相关头文件,创建继承于NSObject的AddressBookManager的通讯录管理类。
定义以下枚举类型,用以表示返回的状态;
定义返回回调函数
其中code代表返回的状态,response代表操作的返回数据结果。
定义两个类方法,分别用于选个单个联系人和整个通讯录
3)获取单个联系人的方法实现
在iOS7中需要实现的代理方法
在iOS8_OR_LATER中需要实现以下代理方法:
获取完整通讯录的方法实现
想要获取详细的实现细节,可以点击下载。