select CNContactPicker 中单个联系人的多个属性

select multiple properties from single contact in CNContactPicker

我正在尝试使用 CNContactPickerViewController 并让 运行 陷入如何 从单个联系人中选择多个属性的问题

选择器的基本显示

    let contactStore = CNContactStore()

override func viewDidLoad() {
    super.viewDidLoad()

    self.askForContactAccess()
    self.displayContacts()
}

func displayContacts(){
    let contactPicker = CNContactPickerViewController()
    contactPicker.delegate = self
    self.present(contactPicker, animated: true, completion: nil)
}

在用户允许后显示地址簿(代码有但上面没有显示)

现在我想做的是当用户 select 是一个联系人时,我们导航到联系人详细信息视图(当前发生这种情况)但是当我尝试使用委托时

func contactPicker(_ picker: CNContactPickerViewController, didSelectContactProperties contactProperties: [CNContactProperty])

我看到了联系人选择器视图,我可以在其中 select 多个联系人。我不介意尝试扩展联系人详细信息视图,以便我可以 select 多个属性,但我什至不知道如何连接它。

我可以创建一个完全 自定义 table 视图 和 select 那里的属性,但是因为苹果创建了一个很好的联系人详细信息视图,我宁愿使用它.

tl;dr - 不,您不能使用 CNContactPickerViewController 到 select 一个联系人的多个属性。

完整版:

CNContactPickerViewController 执行不力且令人困惑。

它实际上并不支持 select 来自单个联系人的多个属性的能力。选择器在 select 一个联系人 属性.

后自动关闭

它实际上并没有让用户 select 来自多个联系人的特定属性。

它支持以下内容:

  • Select单个联系人
  • Select单个属性单个联系人
  • Select多个联系人
  • Select 多个联系人和 return 每个用户 select 多个联系人的单个预定(非用户选择)属性。

要让 didSelectContactProperties 委托被除空属性列表以外的任何东西调用,您必须将 predicateForSelectionOfProperty 属性 设置为指定一个且仅一个的谓词联系 属性 键。如果您提供任何其他谓词,当您点击联系人时会出现黑屏并且您的应用现在挂起并需要被终止。

我认为在选择多个联系人的联系人属性时存在一些错误。

解决方法:

我相信唯一的解决方案(除了您自己围绕 Contacts 框架的完整自定义视图控制器之外)是通过将 CNContactPickerViewController 组合成您自己的多个 属性 selection接触 selection 模式,然后使用 CNContactViewController 显示 selected 接触的详细信息。然后实现 contactViewController(_:shouldPerformDefaultActionFor:) 委托方法来跟踪用户选择的属性。