AddressbookUI是iOS开发框架中提供的一套通信录界面组件。其中封装好了一套选择联系人,查看联系人的界面,在须要时开发者能够直接调用。固然对于联系人界面,开发者也能够进行彻底的自定义,下面连接博客中介绍了如何使用AddressBook框架操做通信录与联系人。数组
http://www.javashuo.com/article/p-uanrwxqc-ce.html框架
AddressBookUI框架主要提供了以下几个类:ide
ABNewPersonViewController:新建联系人界面视图控制器atom
ABPeoplePickerNavigationController:从通信录选择联系人界面视图控制器spa
ABPersonViewController:联系人详情界面视图控制器.net
ABUnknownPersonViewController:一个未在当前通信录中的联系人查看界面,能够添加和编辑代理
ABNewPersonViewController类的使用很是简单,示例以下:code
ABNewPersonViewController *picker = [[ABNewPersonViewController alloc] init]; picker.newPersonViewDelegate = self; [self presentModalViewController:picker animated:YES];
效果以下图所示:orm
ABNewPersonViewController解析以下:对象
//代理 @property(nonatomic,assign,nullable) id<ABNewPersonViewControllerDelegate> newPersonViewDelegate; //通信录实例 只读 @property(nonatomic,readwrite,nullable) ABAddressBookRef addressBook; //联系人 只读 @property(nonatomic,readwrite,nullable) ABRecordRef displayedPerson; //联系人组 只读 @property(nonatomic,readwrite,nullable) ABRecordRef parentGroup;
联系人的新建回调能够在代理方法中处理,以下:
@protocol ABNewPersonViewControllerDelegate <NSObject> //新建联系人完成后的回调 - (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(nullable ABRecordRef)person; @end
ABPeoplePickerNavigationController是用户通信录界面,开发者在须要用户选择联系人时,能够直接调用这个界面来让用户进行选择,示例以下:
ABPeoplePickerNavigationController *vc = [[ABPeoplePickerNavigationController alloc] init]; vc.peoplePickerDelegate = self; [self presentViewController:vc animated:YES completion:nil];
效果以下图:
ABPeoplePickerNavigationController解析以下:
//代理 @property(nonatomic,assign,nullable) id<ABPeoplePickerNavigationControllerDelegate> peoplePickerDelegate; //须要展现的用户联系人属性字段 数组中为属性的ID 在AddressBook框架介绍的博客中有讲解 @property(nonatomic,copy,nullable) NSArray<NSNumber*> *displayedProperties; //通信录实例 @property(nonatomic,readwrite,nullable) ABAddressBookRef addressBook; //设置一个筛选条件 过滤掉不可显示的联系人 @property(nonatomic,copy,nullable) NSPredicate *predicateForEnablingPerson; //设置一个筛选条件 过滤掉不可选择的联系人 @property(nonatomic,copy,nullable) NSPredicate *predicateForSelectionOfPerson; //设置一个筛选条件 过滤掉不可显示的属性 @property(nonatomic,copy,nullable) NSPredicate *predicateForSelectionOfProperty;
用来进行联系人筛选的属性定义以下:
extern NSString * const ABPersonNamePrefixProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonGivenNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonMiddleNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonFamilyNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonNameSuffixProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonPreviousFamilyNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonNicknameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonPhoneticGivenNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonPhoneticMiddleNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonPhoneticFamilyNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonOrganizationNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonDepartmentNameProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonJobTitleProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonBirthdayProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonNoteProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonPhoneNumbersProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonEmailAddressesProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonUrlAddressesProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonDatesProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonInstantMessageAddressesProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonRelatedNamesProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonSocialProfilesProperty NS_AVAILABLE_IOS(8_0); extern NSString * const ABPersonPostalAddressesProperty NS_AVAILABLE_IOS(8_0);
ABPeoplePickerNavigationControllerDelegate中方法解释以下:
//选中联系人进行回调 - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person; //选择联系人属性 - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier; //取消选择 - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker;
ABPersonViewController是联系人的详情展现界面,简单使用以下:
CFErrorRef error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); CFArrayRef peopleArray = ABAddressBookCopyArrayOfAllPeople(addressBook); ABRecordRef person = CFArrayGetValueAtIndex(peopleArray, 0); ABPersonViewController *viewController = [[ABPersonViewController alloc] init]; viewController.personViewDelegate = self; viewController.displayedPerson = person; viewController.allowsActions = NO; viewController.allowsEditing = YES; viewController.displayedProperties = @[[NSNumber numberWithInt:kABPersonPhoneProperty]]; [self presentViewController:viewController animated:YES completion:nil];
界面以下:
ABPersonViewController中经常使用属性方法解析以下:
//代理 @property(nonatomic,assign,nullable) id<ABPersonViewControllerDelegate> personViewDelegate; //通信录实例 @property(nonatomic,readwrite,nullable) ABAddressBookRef addressBook; //联系人记录实例 @property(nonatomic,readwrite) ABRecordRef displayedPerson; //展现的属性字段 @property(nonatomic,copy,nullable) NSArray<NSNumber*> *displayedProperties; //是否容许编辑 @property(nonatomic) BOOL allowsEditing; //是否容许活动按钮 例如分享 @property(nonatomic) BOOL allowsActions; //是否容许关联其余联系人 @property(nonatomic) BOOL shouldShowLinkedPeople; //设置属性高亮 - (void)setHighlightedItemForProperty:(ABPropertyID)property withIdentifier:(ABMultiValueIdentifier)identifier;
ABPersonViewControllerDelegate中方法解释以下:
//选择属性发送时调用 - (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier;
ABUnknownPersonViewController界面与ABPersonViewController基本一致,不一样的是,ABPersonViewController须要使用一个通信录中已经存在的联系人做为参数进行展现,ABUnknownPersonViewController则否则,你可使用一个通信录中不存在的联系人对象来进行界面的渲染,而且支持用户选择将此联系人存入通信录中。示例以下:
ABUnknownPersonViewController *unknown=[[ABUnknownPersonViewController alloc]init]; unknown.displayedPerson=ABPersonCreate(); unknown.allowsAddingToAddressBook=YES;//容许添加 [self presentViewController:unknown animated:YES completion:nil];
ABUnknownPersonViewController中属性方法解释以下:
//代理 @property(nonatomic,assign,nullable) id<ABUnknownPersonViewControllerDelegate> unknownPersonViewDelegate; //通信录实例对象 @property(nonatomic,readwrite,nullable) ABAddressBookRef addressBook; //联系人实例 @property(nonatomic,readwrite) ABRecordRef displayedPerson; //提示名字 @property(nonatomic,copy,nullable) NSString *alternateName; //提示信息 @property(nonatomic,copy,nullable) NSString *message; //是否容许活动 @property(nonatomic) BOOL allowsActions; //是否容许添加电话本 @property(nonatomic) BOOL allowsAddingToAddressBook;
ABUnknownPersonViewControllerDelegate方法:
//联系人解释时调用 - (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownCardViewController didResolveToPerson:(nullable ABRecordRef)person; //发送活动 - (BOOL)unknownPersonViewController:(ABUnknownPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier;