ZLPeoplePickerViewController 0.2.0

ZLPeoplePickerViewController 0.2.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2016年3月

赖志霄, Jesse Armand 维护。




  • 作者:
  • 赖志霄

ABPeoplePickerNavigationController的替代品,支持UILocalizedIndexedCollation。ZLPeoplePickerViewController最初是为了Talkly创建的。

原因?

ABPeoplePickerNavigationController不适用于多语言名称的联系人,也不适用于一些价值160亿美元的基于通讯录的应用。以下是一些示例

这才是它应该有的样子

预览

在选择时呈现ABPersonViewController

ABPersonViewController

返回时发送群发邮件

Group Emails

自定义多重选择

Custom Multiple Select

特色

  • [x] 通过实现LRIndexedCollationWithSearch来支持采用UILocalizedIndexedCollation的多语言索引和排序。
  • [x] 支持按名称、电子邮件和地址搜索。结果使用iOS 8中的UISearchController显示。
  • [x] 支持多重选择。
  • [x] 支持用于筛选联系人的字段遮罩。
  • [ ] 支持按电话号码搜索

用法

请查看演示应用程序以获取示例。

ZLPeoplePickerViewController可以以类似于ABPeoplePickerNavigationController的方式初始化并推送到导航控制器。

self.peoplePicker = [[ZLPeoplePickerViewController alloc] init];
self.peoplePicker.delegate = self;
[self.navigationController pushViewController:self.peoplePicker animated:YES];

还有一个方便的方法可以以模态方式呈现人员选择器。

self.peoplePicker = [ZLPeoplePickerViewController presentPeoplePickerViewControllerForParentViewController:self];

加载大的通讯录可能会花费很长时间。因此,ZLPeoplePickerViewController在初始化后将其缓存到内存中。您可以通过预先使用以下类方法初始化通讯录来进一步减少首次延迟(例如,在viewDidLoad中)。

+ (void)initializeAddressBook;

ZLPeoplePickerViewController使用fieldMask属性来筛选联系人,使信息不完整的人变灰。

@property (nonatomic) ZLContactField filedMask;

numberOfSelectedPeople属性控制多重选择行为。它表示选择器一次最多可以选择的人数。

@property (nonatomic) ZLNumSelection numberOfSelectedPeople;

ZLPeoplePickerViewController可以有一个可选的代理来接收回调。

- (void)peoplePickerViewController:(ZLPeoplePickerViewController *)peoplePicker didSelectPerson:(NSNumber *)recordId {
  // show an ABPersonViewController
  [self showPersonViewController:[recordId intValue] onNavigationController:peoplePicker.navigationController];
}
- (void)peoplePickerViewController:(ZLPeoplePickerViewController *)peoplePicker didReturnWithSelectedPeople:(NSArray *)people {
  // people will be empty if no person is selected
  if (!people || people.count==0) {return;}
  [self presentViewController: [self alertControllerWithTitle:@"Return with selected people:" Message:[[self firstNameForPeople:people] componentsJoinedByString:@", "]] animated:YES completion:nil];
}
- (void)newPersonViewControllerDidCompleteWithNewPerson:(nullable ABRecordRef)person {
    NSLog(@"Added a new person");
}

依赖项

ZLPeoplePickerViewController内部使用APAddressBook来访问通讯录。它需要APAddressBook

要求

  • iOS 8或更高版本。
  • 自动引用计数(ARC)。

许可证

ZLPeoplePickerViewController在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。