我正在尝试使用更现代的CNContactPickerViewController
来选择联系人。如果联系人有多个地址,我希望用户只能选择其中一个地址。如果专门选择了一个地址,我也想获得CNContact
对象。
我可以使用已弃用的ABPeoplePickerNavigationControllerDelegate
来执行此操作,其中此委托功能可用:
func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)
但是,使用CNContactPickerViewController
时,只有相关的委托功能可用:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
请注意,没有返回CNContact
个对象。我在contactProperty中获得CNPostalAddress
,但我没有收到所有联系人的记录。
以下是我与ABPeoplePickerNavigationController
使用的代码:
let peoplePicker = ABPeoplePickerNavigationController()
peoplePicker.peoplePickerDelegate = self
peoplePicker.displayedProperties = [NSNumber(value: kABPersonAddressProperty as Int32), NSNumber(value: kABPersonBirthdayProperty as Int32)]
peoplePicker.predicateForSelectionOfPerson = NSPredicate(format: "postalAddresses.@count <= 1")
peoplePicker.modalPresentationStyle = UIModalPresentationStyle.currentContext
self.present(peoplePicker, animated: true, completion: nil)
...这里是CNContactPickerViewController的代码:
let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.displayedPropertyKeys = [CNContactPostalAddressesKey, CNContactBirthdayKey]
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "postalAddresses.@count <= 1")
contactPicker.modalPresentationStyle = UIModalPresentationStyle.currentContext
self.present(contactPicker, animated: true, completion: nil)
所以,对我而言,新的联系人框架中似乎不再提供相同的功能,但我在这里查看是否遗漏了某些内容。
答案 0 :(得分:3)
请注意,没有返回
CNContact
个对象。我明白了 在contactProperty中CNPostalAddress
,但我没有收到 拥有联系人的记录。
可以从CNContact
的{{1}}属性中检索contact
对象,因此......
但是,使用
CNContactProperty
时,只有这个 相关代表职能可用:CNContactPickerViewController
...实现这种委托方法可以让你做你想做的事。但是你想确保你不实现其他委托方法,例如:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
将在选择联系人(而非其财产)时解除选择器。
答案 1 :(得分:1)
请注意,没有CNContact对象
你错了。委托方法为show()
,它为您提供CNContactProperty,CNContactProperty为您提供整个CNContact及其所有属性。