CNContactPickerViewController Получить только выбранный элемент - PullRequest
0 голосов
/ 27 января 2019

Когда реализован метод делегата:

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

Пользователь может выбрать контакт из списка, после чего автоматически появятся контактные данные. При выборе указанного поля из контакта, CNContactPickerViewController отклоняется.

Проблема заключается в том, что если есть два телефонных номера, и пользователь специально выбирает один из номеров, возвращаемое CNContactProperty включает оба телефонных номера.

Как извлечь только номер, на который нажал пользователь?

Пример кода:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    contactProperty.contact.phoneNumbers //the numbers are an array so I am not able to see which one the user selected
}

1 Ответ

0 голосов
/ 27 января 2019

Ваша проблема в том, что вы игнорируете выбранное свойство.Вы получаете прямой доступ ко всем телефонным номерам контакта.Используйте параметр contactProperty, который имеет только одно выбранное свойство.

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    // See if the user selected a phone number
    if let phone = contactProperty.value as? CNPhoneNumber {
        let number = phone.stringValue
    }
}

Вышесказанное хорошо, если вы хотите иметь дело только с выбранными телефонными номерами.Если вы хотите обрабатывать несколько разных типов свойств, лучше использовать что-то вроде следующего:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    switch contactProperty.key {
    case CNContactPhoneNumbersKey:
        if let phone = contactProperty.value as? CNPhoneNumber {
            let number = phone.stringValue
            // do something
        }
    // case ...: // some other type
    default:
        break
    }
}
...