(一〇〇)使用AddressBookUI实现通讯录操作
2015-08-01 18:33
441 查看
上节提到使用AddressBook可以实现通讯录数据的获取,但有时需要用户自己选取联系人或者联系人信息,这时候就要借助AddressBookUI框架的ABPeoplePickerNavigationController控制器,该控制器可以通过modal方式展示,会提供一个功能完备的通讯录界面,并且可以监听和拦截用户的点击。
对于iOS7和iOS8,该框架有着不同的用法,下面分开讲解。
【共同点】
都需要导入框架主头文件,创建控制器,modal控制器。
注意代理不是delegate而是peoplePickerDelegate。
①iOS7用户点击Cancel时,控制器的dismiss需要自己实现,通过一个代理方法。
①iOS8的控制器会自动dismiss,不必实现方法,但为了适配,应该实现上面的方法,判断系统版本然后不同处理。
②iOS8两个拦截操作的方法过期了,无法再使用,而是换成了下面两个代理方法。
这两个方法没有返回值,一旦实现,只要用户点击了相应的内容,控制器会直接退出。
对于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{ }在这两个方法内同样可以实现数据的获取。
相关文章推荐
- IOS开发UI基础文本属性Attributes
- IOS开发UI基础UIControl事件
- (个人开源)ffpanel --ffmpeg的GUI,让ffmpeg离开黑黑的命令行
- IOS开发UI基础UIImagePickerController的属性
- IOS开发UI基础UITableView的属性
- IOS开发UI基础UIActivityIndicatorView的属性
- IOS开发UI基础 UIAlertView的属性
- IOS开发UI基础UIImageView属性属性
- IOS开发UI基础 UIDatePicker的属性
- IOS开发UI基础UILabel属性
- IOS开发UI基础UIPageControl的属性
- 使用UIScrollView 结合 UIImageView 实现图片循环滚动
- IOS开发UI基础UIPikerView的属性
- Fuel 安装小结
- IOS开发UI基础UISegment属性
- IOS开发UI基础UISlide属性
- IOS开发UI基础UISwitch属性
- IOS开发UI基础UITextView相关属性
- IOS开发UI基础UITextFidle相关属性
- ueditor.图片上传出错,解决方式