CNContactPickerViewController, когда у контакта есть несколько писем
Я использую 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 ответа
Чтобы позволить пользователю выбрать, какой адрес электронной почты выбрать, установите
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
приписывать.
Хорошо, нашел решение методом проб-ошибок...
Я реализовывал оба:
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)
}
}
Но только первый должен был быть реализован