CNContactPickerViewController, когда у контакта есть несколько писем - PullRequest
0 голосов
/ 04 июня 2018

Я использую CNContactPickerViewController, чтобы позволить пользователю выбрать адрес электронной почты одного из его / ее контактов

let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count > 0")
contactPicker.displayedPropertyKeys = [CNContactNicknameKey, CNContactEmailAddressesKey]

Когда у контакта есть только одно письмо, все идет хорошо

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

Но иногда один из контактов имеет более одного письма, как я могу позволить пользователю выбрать один из них?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Чтобы позволить пользователю выбирать, какой адрес электронной почты выбрать, установите

picker.predicateForEnablingContact = NSPredicate(format: "emailAddresses.@count > 0")
picker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count == 1")

Таким образом, для пользователей с одним письмом

contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)

, но для пользователей с болеечем один адрес электронной почты, отображается контактная информация, и выбранный адрес электронной почты передается

contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)

. Обратите внимание, что CNContactProperty также имеет атрибут .contact.

0 голосов
/ 04 июня 2018

Хорошо, нашел решение методом проб и ошибок ...

Я реализовывал оба:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    if let _mail = contactProperty.value as? String {
        self.personWasSelected(with: _mail)
    }
}

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

Но должен был быть реализован только первый

...