首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CNContactPickerViewController获取地址和联系?

如何使用CNContactPickerViewController获取地址和联系?
EN

Stack Overflow用户
提问于 2016-09-22 00:14:54
回答 2查看 3.2K关注 0票数 1

我正在尝试使用更现代的CNContactPickerViewController来选择联系人。如果联系人有多个地址,我希望用户只能选择其中一个地址。如果特定地选择了一个地址,我也希望获得CNContact对象。

我可以使用不推荐的ABPeoplePickerNavigationControllerDelegate来完成这个任务,在这里可以使用这个委托函数:

代码语言:javascript
复制
func peoplePickerNavigationController(_ peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)

但是,在使用CNContactPickerViewController时,只有这个相关的委托函数可用:

代码语言:javascript
复制
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)

注意,没有返回CNContact对象。我在CNPostalAddress中获得contactProperty,但我没有收到拥有联系人的记录。

下面是我在ABPeoplePickerNavigationController中使用的代码

代码语言:javascript
复制
    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的代码:

代码语言:javascript
复制
    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)

因此,在我看来,新的联系人框架中似乎不再提供相同的功能,但我在这里检查是否遗漏了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 02:21:04

注意,没有返回CNContact对象。我在CNPostalAddress中获得contactProperty,但我没有收到拥有联系人的记录。

CNContact对象可以从CNContactPropertycontact属性中检索,所以…

但是,在使用CNContactPickerViewController时,只有这个相关的委托函数可用: func contactPicker(_ didSelect : CNContactPickerViewController,didSelect contactProperty: CNContactProperty)

…实现此委托方法将允许您做您想做的事情。但是,您需要确保自己是而不是实现其他委托方法的,例如:

代码语言:javascript
复制
func contactPicker(CNContactPickerViewController, didSelect: CNContact)

它将在选择联系人(而不是其属性)时将其排除在外。

票数 3
EN

Stack Overflow用户

发布于 2016-10-05 02:25:25

注意,没有CNContact对象

你只是错了。委托方法是contactPicker(_:didSelect:),它向您传递一个CNContactProperty,而CNContactProperty向您传递整个CNContact及其所有属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39628346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档