我正在访问我的应用程序中的联系人。联系人显示正确,但以格式显示
-> Aditya
-> Ankur
-> Bhavya
-> Shubham
当我单击任何名称时,它都会使我与完整的联系人CNContact
问题在于任何名称都有两个与之关联的数字。
我希望它显示为
-> Aditya - mob number 1
-> Ankur - mob number 1
-> Bhavya - mob number 1
-> Bhavya - mob number 2
-> Shubham - mob number 1
以这种格式显示每个数字,我们可以自由选择
当前我正在使用代码
func openContactPicker() {
let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactPhoneNumbersKey]
self.present(contactPicker, animated: true, completion: nil)
}
extension ViewController : CNContactPickerDelegate {
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
picker.dismiss(animated: true, completion: nil)
print("Contact: \(contact)")
}
}
我知道我可以通过创建一个新的View并对其进行设计来做到这一点。但是我们可以借助可用的框架吗?
答案 0 :(得分:1)
在StackOverflow上没有讨论框架/库或SDK的问题。
您应该遍历给定的联系人,如果有多个联系人使用多个电话号码,请为其创建另一个记录。
您可以为您的结果建立模型,例如
struct ContactModel {
let name: String
let number: String
}
将所有响应转换为该响应并将其存储在contact: [ContactModel]
数组中。
然后遍历您的CNContacts并创建模型
let cnContacts = [CNContact]()
var contacts = [ContactModel]()
cnContacts.forEach {
let name = "\($0.givenName) \($0.familyName)"
for number in $0.phoneNumbers {
contacts.append(ContactModel(name: name, number: number.value.stringValue))
}
}
注意:代码是在此处编写的,并且未在XCode中进行测试,因此可能需要进行一些调整,但是这种方法应该可以。