Я пытаюсь использовать более современный CNContactPickerViewController
для выбора контакта. Если у контакта несколько адресов, я хочу, чтобы пользователь мог выбрать только один из адресов. Если адрес специально выбран, я также хочу получить объект CNContact
.
Я мог бы сделать это, используя устаревший ABPeoplePickerNavigationControllerDelegate
, где эта функция делегата была доступна:
func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)
Однако при использовании CNContactPickerViewController
доступна только эта соответствующая функция делегата:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
Обратите внимание, что объект CNContact
не возвращается. Я получаю CNPostalAddress
в свойстве контакта, но не получаю запись о контакте-владельце.
Вот код, который я использовал с ABPeoplePickerNavigationController
:
let peoplePicker = ABPeoplePickerNavigationController()
peoplePicker.peoplePickerDelegate = self
peoplePicker.displayedProperties = [NSNumber(value: kABPersonAddressProperty as Int32), NSNumber(value: kABPersonBirthdayProperty as Int32)]
peoplePicker.predicateForSelectionOfPerson = NSPredicate(format: "postalAddresses.@count <= 1")
peoplePicker.modalPresentationStyle = UIModalPresentationStyle.currentContext
self.present(peoplePicker, animated: true, completion: nil)
... и вот код с CNContactPickerViewController:
let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.displayedPropertyKeys = [CNContactPostalAddressesKey, CNContactBirthdayKey]
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "postalAddresses.@count <= 1")
contactPicker.modalPresentationStyle = UIModalPresentationStyle.currentContext
self.present(contactPicker, animated: true, completion: nil)
Итак, мне кажется, что та же функциональность больше не доступна в более новой структуре контактов, но я проверяю здесь, чтобы увидеть, не пропустил ли я что-то.