(一〇〇)使用AddressBookUI实现通讯录操作

上节提到使用AddressBook可以实现通讯录数据的获取,但有时需要用户自己选取联系人或者联系人信息,这时候就要借助AddressBookUI框架的ABPeoplePickerNavigationController控制器,该控制器可以通过modal方式展示,会提供一个功能完备的通讯录界面,并且可以监听和拦截用户的点击。

对于iOS7和iOS8,该框架有着不同的用法,下面分开讲解。

【共同点】

都需要导入框架主头文件,创建控制器,modal控制器。

注意代理不是delegate而是peoplePickerDelegate。

#import <AddressBookUI/AddressBookUI.h>
ABPeoplePickerNavigationController *pnvc = [[ABPeoplePickerNavigationController alloc] init];
pnvc.peoplePickerDelegate = self;
[self presentViewController:pnvc animated:YES completion:nil];

【iOS7】

①iOS7用户点击Cancel时,控制器的dismiss需要自己实现,通过一个代理方法。

// iOS7时点击Cancel时调用,必须实现,否则无法退出View。
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{

    if ([[UIDevice currentDevice].systemVersion doubleValue] < 8.0) {
        [peoplePicker dismissViewControllerAnimated:YES completion:nil];
    }

}

②当用户点击一个联系人或者一个数据时,会调用下面两个代理方法,只要返回的是YES,就不会进行下一步操作,通过返回YES可以实现操作的拦截和数据的获取。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{

    return YES; // 返回YES代表不进行下一步操作,相当于对操作的拦截

}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{

    return YES;

}

【iOS8】

①iOS8的控制器会自动dismiss,不必实现方法,但为了适配,应该实现上面的方法,判断系统版本然后不同处理。

②iOS8两个拦截操作的方法过期了,无法再使用,而是换成了下面两个代理方法。

这两个方法没有返回值,一旦实现,只要用户点击了相应的内容,控制器会直接退出。

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person{

}

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{

}

在这两个方法内同样可以实现数据的获取。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-19 22:05:07

(一〇〇)使用AddressBookUI实现通讯录操作的相关文章

[摘]iOS 通讯录操作

访问地址簿和单个联系人数据的接口是基于C语言的函数,接口传递对地址簿各种对象的引用作为参数.管理地址簿中条目的基类对象是 ABRecord.一个 ABRecord 可以表示一个人 或者一个群体 ABGroup .无论何时,在界面上选中一条记录,或者使用框架进行查询返回一条结果,系统都会返回一个指向 ABRecord 的指针,标示为 ABRecordRef.与地址簿 API 的大部分交互都涉及使用 ABRecordRef 这个引用类型. 常用访问记录的函数如下: ABRecordID ABReco

iOS 通讯录开发 AddressBook AddressBookUI框架的使用

使用到的系统框架AddressBook,AddressBookUI:IOS中的通讯录是存储在数据库中的,开发人员不能直接访问通讯录数据库,必须依靠AddressBook提供的API来实现通讯录操作,通过AddressBook.FrameWork可以操作通讯录信息,但是AddressBook框架是基于C语言编写的,无法使用ARC管理内存,需要自己手动管理. AddressBook框架的常用类型: ABAddressBookRef:代表通讯录对象.通过该对象,可以直接访问和保存通讯录信息. ABRe

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

公司项目有访问通讯录的需求,所以开始了探索之路.从开始的一无所知,到知识的渐渐清晰.这一切要感谢广大无私分享的 “coder”,注:我是尊称的语气! 苹果提供了访问系统通讯录的框架,以便开发者对系统通讯录进行操作.(此demo为纯代码),想要访问通讯录,需要添加AddressBookUI.framework和AddressBook.framework两个框架,添加的地点这里就不在赘述了.在控制器内部首先import两个头文件,<AddressBook/AddressBook.h> 和 <

iOS学习笔记29-系统服务(二)通讯录

一.通讯录 iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库的,实现通讯录操作需要使用到AddressBook.framework框架. AddressBook.framework框架: 可以从底层去操作通讯录的所有信息,做到精确控制 是基于C语言编写的,无法使用ARC管理内存,需要开发者手动管理内存 需要自构UI界面 iOS还提供了另外一个框架来供开发者操作通讯录,那就是AddressBookUI.framework AddressBookUI.f

iOS开发之--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook功能开发汇总

前言 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 目录 系统应用 系统服务 2.1. 短信与邮件 2.2. 通讯录 2.3. 蓝牙 2.4. 社交 2.5. Game Center 2.6. 应用内购买 2.7. iCloud 2.8. Passbook 1. 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览

iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenUR

iOS开发系列通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开

--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务:http://www.jinhusns.com/Products/Download/?type=xcj 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 目 录 系统应用 在开发某些应用时可能希望能

iOS开发——高级技术&amp;通讯录服务

通讯录服务 AddressBook iOS中带有一 个Contacts应用程序来管理联系人,但是有些时候我们希望自己的应用能够访问或者修改这些信息,这个时候就要用到 AddressBook.framework框架.iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库 的,必须依靠AddressBook提供的标准API来实现通讯录操作.通过AddressBook.framework开发者可以从底层去操作 AddressBook.framework的所有信息

AddressBook/AddressBookUI

概述 在iOS中,有2个框架可以访问用户的通讯录.从iOS6开始,需要得到用户的授权才能访问通讯录,因此在使用之前,需要检查用户是否已经授权ABAddressBookGetAuthorizationStatus() 授权状态 kABAuthorizationStatusNotDetermined 用户还没有决定是否授权你的程序进行访问kABAuthorizationStatusRestricted  iOS设备上的家长控制或其它一些许可配置阻止程序与通讯录数据库进行交互kABAuthorizat