在 CNContactPicker 中选择多个联系人/联系人属性



我使用的是这里定义的谓词: 如何在 iOS 中选择联系电话号码?

contactsPicker.predicateForEnablingContact = NSPredicate(format:"phoneNumbers.@count > 0")
contactsPicker.predicateForSelectionOfContact = NSPredicate(format: "phoneNumbers.@count == 1")
contactsPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey]

我还定义了以下委托方法:

func contactPicker(_ picker: CNContactPickerViewController,
didSelect contactProperty: CNContactProperty) {
print(contactProperty)
}
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
print(contact)
}

我期望的行为是用户可以从多个不同的联系人中选择电话号码属性,当用户单击完成时,我会得到这些属性和联系人的列表。

遗憾的是,当用户单击"完成"时,上面的代码会立即退出选取器。这意味着用户无法选择多个电话号码和/或多个联系人,并且只能在选取器退出之前选择一个。

如何更改它,以便它选择多个属性或联系人并在单击完成时提交?

为了选择多个联系人属性,您需要在委托中定义contactPicker:didSelectContactProperties:,而不是您在问题中提到的方法。

希望这有帮助!

苹果文档

如果要实现联系人的多选,则需要在视图控制器中实现CNContactPickerViewController的委托,即CNContactPickerDelegate,因此它会自动配置CNContactPickerViewController进行多选。

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty;

如果您只想允许用户选择联系人,则需要实现以下方法...

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact*> *)contacts;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperties:(NSArray<CNContactProperty*> *)contactProperties;

不要同时实现单选和多选委托方法。

注意:实现这些方法之一将配置多选选取器。

最新更新