iOS9 - CNContactPickerViewController:预选联系人

时间:2015-10-16 13:10:47

标签: ios9 contactpicker cncontact

我使用新的CNContactPickerViewController从地址簿中选择联系人,并在我的应用程序中使用它们。

当我按下按钮时,我会调用此代码:

func contactPicker(picker: CNContactPickerViewController, didSelectContacts contacts: [CNContact]) {

    selectedRecipients = contacts.map { $0.emailAddresses.first!.value as! String }
    tableView.reloadData()

}

我使用以下CNContactPickerDelegate方法选择多个联系人:

N

这有助于我填充一个名为" selectedRecipients" (基本上,是一个电子邮件地址字符串)

结果如下: enter image description here

工作正常。但是,如果我之前选择了联系人,我希望contactPicker在初始化时预先选择联系人,也就是说,在联系人出现时显示联系人。 有没有办法做到这一点?

由于

2 个答案:

答案 0 :(得分:1)

我认为你要求Contacts Framework管理一些它不打算处理的额外状态。您的“已选中”状态标记在CNContact object上不可用(请参阅下面的CNKeyDescriptor列表列表),因此无法在选择器视图控制器中显示。

在我看来,如果你想在你的应用程序中添加这个额外的状态,你将需要推出自己的解决方案。

据我所知,CNKeyDescriptor列表:

// Properties that are always fetched. Can be used with key value coding and observing.
@available(iOS 9.0, *)
public let CNContactIdentifierKey: String

// Optional properties that can be fetched. Can be used with key value coding and observing.
@available(iOS 9.0, *)
public let CNContactNamePrefixKey: String
@available(iOS 9.0, *)
public let CNContactGivenNameKey: String
@available(iOS 9.0, *)
public let CNContactMiddleNameKey: String
@available(iOS 9.0, *)
public let CNContactFamilyNameKey: String
@available(iOS 9.0, *)
public let CNContactPreviousFamilyNameKey: String
@available(iOS 9.0, *)
public let CNContactNameSuffixKey: String
@available(iOS 9.0, *)
public let CNContactNicknameKey: String
@available(iOS 9.0, *)
public let CNContactPhoneticGivenNameKey: String
@available(iOS 9.0, *)
public let CNContactPhoneticMiddleNameKey: String
@available(iOS 9.0, *)
public let CNContactPhoneticFamilyNameKey: String
@available(iOS 9.0, *)
public let CNContactOrganizationNameKey: String
@available(iOS 9.0, *)
public let CNContactDepartmentNameKey: String
@available(iOS 9.0, *)
public let CNContactJobTitleKey: String
@available(iOS 9.0, *)
public let CNContactBirthdayKey: String
@available(iOS 9.0, *)
public let CNContactNonGregorianBirthdayKey: String
@available(iOS 9.0, *)
public let CNContactNoteKey: String
@available(iOS 9.0, *)
public let CNContactImageDataKey: String
@available(iOS 9.0, *)
public let CNContactThumbnailImageDataKey: String
@available(iOS 9.0, *)
public let CNContactImageDataAvailableKey: String
@available(iOS 9.0, *)
public let CNContactTypeKey: String
@available(iOS 9.0, *)
public let CNContactPhoneNumbersKey: String
@available(iOS 9.0, *)
public let CNContactEmailAddressesKey: String
@available(iOS 9.0, *)
public let CNContactPostalAddressesKey: String
@available(iOS 9.0, *)
public let CNContactDatesKey: String
@available(iOS 9.0, *)
public let CNContactUrlAddressesKey: String
@available(iOS 9.0, *)
public let CNContactRelationsKey: String
@available(iOS 9.0, *)
public let CNContactSocialProfilesKey: String
@available(iOS 9.0, *)
public let CNContactInstantMessageAddressesKey: String

答案 1 :(得分:1)

使用谓词。保留先前选择的CNContact标识符的数组,然后像这样发送谓词:

contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"!(identifier IN %@) && emailAddresses.@count > 0", arrayOfPreviouslySelected];

以及仅显示包含电子邮件地址的联系人的示例:

{{1}}