委托(delegate)方法实现时:
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
}
最佳答案
您的问题是您忽略了选定的属性。您正在直接访问联系人的所有电话号码。使用只有一个选定属性的 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
}
}
关于ios - CNContactPickerViewController 仅检索选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54384843/