1

实现委托方法时:

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
}
4

1 回答 1

3

您的问题是您忽略了选定的属性。您正在直接访问联系人上的所有电话号码。使用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
    }
}
于 2019-01-27T03:47:25.657 回答