我正在使用此处定义的谓词: How can I pick a contact phone number in 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)
}
我期望的行为是用户可以从多个不同的联系人中选择电话号码属性,当用户点击完成后,我会得到这些属性和联系人的列表。
不幸的是,上面的代码会在用户点击完成后立即退出选择器。这意味着用户无法选择多个电话号码和/或多个联系人,并且只能在选择器退出之前选择一个。
如何更改它以便在点击完成后选择多个属性或联系人并提交?
答案 0 :(得分:0)
要选择多个联系人属性,您需要在代理中定义contactPicker:didSelectContactProperties:
,而不是在问题中提到的方法。
希望这有帮助!
答案 1 :(得分:0)
如果您想实现多选联系人,那么您需要在视图控制器中实现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;
不要同时实现单选和多选委托方法。
注意:实施其中一种方法会将选择器配置为多选。