gpt4 book ai didi

ios - 从 CNContactPicker 中的单个联系人中选择多个属性

转载 作者:行者123 更新时间:2023-11-30 11:30:45 26 4
gpt4 key购买 nike

我正在尝试使用 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)
}

这会在用户授予权限后显示地址簿(代码在那里,但上面没有显示)

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

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

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

我可以创建一个完全自定义表格 View 并选择其中的属性,但由于苹果创建了一个很好的联系人详细信息 View ,我宁愿使用它。

最佳答案

tl;dr - 不,您不能使用 CNContactPickerViewController 从一个联系人中选择多个属性。

完整版:

CNContactPickerViewController 的实现很糟糕且令人困惑。

它实际上并不支持从单个联系人中选择多个属性的功能。选择单个联系人属性后,选择器会自动关闭。

它实际上并不让用户从多个联系人中选择特定属性。

它支持以下内容:

  • 选择单个联系人
  • 选择单个联系人的单个属性
  • 选择多个联系人
  • 选择多个联系人,并从用户选择的多个联系人中的每一个中返回一个预先确定的(非用户选择的)属性。

要使用除空属性列表之外的任何内容来调用 didSelectContactProperties 委托(delegate),您必须将 predicateForSelectionOfProperty 属性设置为指定一个且仅一个的谓词联系属性键。如果您提供任何其他谓词,则当您点击联系人时会出现黑屏,并且您的应用程序现在会挂起并需要终止。

我相信存在多个与选取多个联系人的联系人属性相关的错误。

解决方法:

我相信唯一的解决方案(除了您自己的联系人框架周围的完整自定义 View Controller 之外)是通过在单联系人选择模式下组合 CNContactPickerViewController 来进行自己的多个属性选择,然后使用 CNContactViewController 显示所选联系人的详细信息。然后实现 contactViewController(_:shouldPerformDefaultActionFor:) 委托(delegate)方法来跟踪用户选择的属性。

关于ios - 从 CNContactPicker 中的单个联系人中选择多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com