Выбор нескольких контактов / свойств контакта в 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)
}

Я ожидаю, что пользователь выберет свойства номера телефона у нескольких разных контактов, и когда пользователь нажмет кнопку "Готово", я получу список этих свойств и контактов.

К сожалению, приведенный выше код сразу покидает средство выбора, когда пользователь нажимает "Готово". Это означает, что пользователь не может выбрать несколько телефонных номеров и / или несколько контактов и может выбрать только один, прежде чем закроется сборщик.

Как я могу изменить его так, чтобы он выбирал несколько свойств или контактов и отправлял по нажатию на готово?

2 ответа

Чтобы выбрать более одного свойства контакта, необходимо определить contactPicker:didSelectContactProperties: в вашем делегате вместо методов, которые вы упомянули в своем вопросе.

Надеюсь это поможет!

Документация Apple

Если вы хотите реализовать множественный выбор контактов, то вам нужно реализовать 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;

Не реализуйте методы делегирования с одним и несколькими вариантами выбора одновременно.

ПРИМЕЧАНИЕ. Реализация одного из этих методов настроит средство выбора для множественного выбора.

Другие вопросы по тегам