我正在尝试使用更现代的CNContactPickerViewController来选择联系人。如果联系人有多个地址,我希望用户只能选择其中一个地址。如果特定地选择了一个地址,我也希望获得CNContact对象。
我可以使用不推荐的ABPeoplePickerNavigationControllerDelegate来完成这个任务,在这里可以使用这个委托函数:
func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)但是,在使用CNContactPickerViewController时,只有这个相关的委托函数可用:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)注意,没有返回CNContact对象。我在CNPostalAddress中获得contactProperty,但我没有收到拥有联系人的记录。
下面是我在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)...and,这是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)因此,在我看来,新的联系人框架中似乎不再提供相同的功能,但我在这里检查是否遗漏了什么。
发布于 2016-10-05 02:21:04
注意,没有返回
CNContact对象。我在CNPostalAddress中获得contactProperty,但我没有收到拥有联系人的记录。
CNContact对象可以从CNContactProperty的contact属性中检索,所以…
但是,在使用
CNContactPickerViewController时,只有这个相关的委托函数可用: func contactPicker(_ didSelect : CNContactPickerViewController,didSelect contactProperty: CNContactProperty)
…实现此委托方法将允许您做您想做的事情。但是,您需要确保自己是而不是实现其他委托方法的,例如:
func contactPicker(CNContactPickerViewController, didSelect: CNContact)它将在选择联系人(而不是其属性)时将其排除在外。
发布于 2016-10-05 02:25:25
注意,没有CNContact对象
你只是错了。委托方法是contactPicker(_:didSelect:),它向您传递一个CNContactProperty,而CNContactProperty向您传递整个CNContact及其所有属性。
https://stackoverflow.com/questions/39628346
复制相似问题