【问题标题】:CNContactPickerViewController when contact has multiple mails联系人有多个邮件时的 CNContactPickerViewController
【发布时间】:2018-06-04 14:49:49
【问题描述】:

我正在使用 CNContactPickerViewController 让用户选择他/她的联系人之一的电子邮件

let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count > 0")
contactPicker.displayedPropertyKeys = [CNContactNicknameKey, CNContactEmailAddressesKey]

当联系人只有一封邮件时,一切顺利

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

但有时其中一位联系人有不止一封邮件,我怎样才能让用户选择其中之一?

【问题讨论】:

    标签: swift cncontactpicker


    【解决方案1】:

    要让用户选择要选择的电子邮件地址,请设置

    picker.predicateForEnablingContact = NSPredicate(format: "emailAddresses.@count > 0")
    picker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count == 1")
    

    这样,对于只有一封电子邮件的用户

    contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)
    

    被调用,但对于拥有不止一封电子邮件的用户,会显示联系详细信息并将所选电子邮件传递给

    contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
    

    注意CNContactProperty 也有.contact 属性。

    【讨论】:

      【解决方案2】:

      好的,通过试错找到了解决方案……

      我同时实现了这两个:

      func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
          if let _mail = contactProperty.value as? String {
              self.personWasSelected(with: _mail)
          }
      }
      
      func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
      
          if let _mail = contact.emailAddresses.first?.value as String? {
              self.personWasSelected(with: _mail)
          }
      }
      

      但应该只实现第一个

      【讨论】:

        猜你喜欢
        • 2016-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 2011-05-16
        • 2016-04-08
        • 1970-01-01
        相关资源
        最近更新 更多