你的位置:首页 > 软件开发 > 操作系统 > iOS通讯录整合,兼容iOS789写法,附demo

iOS通讯录整合,兼容iOS789写法,附demo

发布时间:2016-05-31 19:00:08
苹果的通讯录功能在iOS7,iOS8,iOS9 都有着一定的不同,iOS7和8用的是 <AddressBookUI/AddressBookUI.h> ,但是两个系统版本的代理方法有一些变化,有些代理方法都标注了 NS_DEPRECATED_IOS(2_0, 8 ...

苹果的通讯录功能在iOS7,iOS8,iOS9 都有着一定的不同,iOS7和8用的是 <AddressBookUI/AddressBookUI.h> ,但是两个系统版本的代理方法有一些变化,有些代理方法都标注了 NS_DEPRECATED_IOS(2_0, 8_0) 并推荐了另一个代理方法与之对应。  而iOS8到iOS9则是直接弃用了<AddressBookUI/AddressBookUI.h>取而代之的是<ContactsUI/ContactsUI.h>,后者是OC调用,据说当时苹果宣布弃用AddressBookUI还引来了阵阵欢呼。这也就是在使用通讯录功能时得考虑版本各种判断,我也就是工作中遇到了这种坑,然后就顺手兼容封装了一下。希望能解决这个问题。

 

我觉得通讯录这里的类结构没必要像SDWebImage或是Core Location这样列出来详细去说。大家用到通讯录无外乎就三个功能:

1.点击弹出通讯录页面,选择了一个联系人的电话后直接将信息填到页面输入框内。

2.遍历所有的通讯录数据统一做批量操作,搭建新页面或直接上传。

3.给通讯录写入一条信息。

 

这里会先对比一下iOS789的写法,最后奉上demo(一个封装后的库,提供了非常便利的api)。不关心内部实现的朋友可以直接拉到demo部分。

 

一、首先是获取通讯录的权限

iOS7和8保持一致

  ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();  ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);  if (status == kABAuthorizationStatusNotDetermined) {    NSLog(@"还没问");    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error){      if(granted){        NSLog(@"点击同意");      }else{        NSLog(@"点击拒绝");      }    });  }else if (status == kABAuthorizationStatusAuthorized){    NSLog(@"已经授权");    [self loadPerson];  }else {    NSLog(@"没有授权");    // 弹窗提示去获取权限  }

原标题:iOS通讯录整合,兼容iOS789写法,附demo

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。