#ios #swift #cncontact #cncontactstore #cncontactpicker
#iOS #swift #cncontact #cncontactstore #cncontactpicker
Вопрос:
в моем приложении я использую CNContactPickerViewController
для получения контактов. Пользователь может выбрать несколько контактов, поэтому я реализовал следующие методы делегирования.
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
var tempContacts = [Contact]()
contacts.forEach { (contact) in
if let phoneNumber = contact.phoneNumbers.first {
let contact = Contact(name: "(contact.givenName) (contact.familyName)" , phoneNumber: "(phoneNumber.value.stringValue)")
tempContacts.append(contact)
}
}
selectedContacts = tempContacts
_ = Contact.save(contacts: selectedContacts)
}
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
print("Cancel contact picker")
}
Однако некоторые пользователи жалуются на невозможность увидеть и выбрать, имеет ли контакт более одного телефонного номера. Можно ли показывать контакты с несколькими номерами?
Ответ №1:
Вы используете только первый номер телефона контакта:
if let phoneNumber = contact.phoneNumbers.first {
let contact = Contact(name: "(contact.givenName) (contact.familyName)" , phoneNumber: "(phoneNumber.value.stringValue)")
tempContacts.append(contact)
}
Что, если вы сопоставите все телефонные номера с массивом контактов, используя map
метод:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
var tempContacts = [Contact]()
contacts.forEach { (contact) in
let contactPhoneNumbers = contact.phoneNumbers.map { Contact(name: "($0.givenName) ($0.familyName)" , phoneNumber: "($0.value.stringValue)") }
tempContacts.append(contentsOf: contactPhoneNumbers)
}
selectedContacts = tempContacts
_ = Contact.save(contacts: selectedContacts)
}
Комментарии:
1. Я уже думал добавить несколько телефонных номеров, если они существуют, но я хотел бы показать пользователю при выборе в списке.