首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS9 - CNContactPickerViewController :预选联系人

iOS9 - CNContactPickerViewController :预选联系人
EN

Stack Overflow用户
提问于 2015-10-16 21:10:47
回答 2查看 2.8K关注 0票数 5

我使用新的CNContactPickerViewController从通讯录中选择联系人,并在我的应用程序中使用它们。

当我按下一个按钮时,我调用这个代码:

代码语言:javascript
复制
let contactPicker = CNContactPickerViewController()
        contactPicker.delegate = self
        contactPicker.predicateForEnablingContact = NSPredicate(format: "emailAddresses.@count > 0")
        presentViewController(contactPicker, animated: true, completion: nil)

我使用下面的CNContactPickerDelegate方法选择了多个联系人:

代码语言:javascript
复制
func contactPicker(picker: CNContactPickerViewController, didSelectContacts contacts: [CNContact]) {

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

}

这帮助我填充一个名为"selectedRecipients“的数组(基本上是一个emailAddresses字符串数组)

结果如下:

这工作得很好。但是,如果我以前选择了联系人,我希望contactPicker在我初始化它时预先选择联系人,也就是说,当它出现时,显示已经选择的联系人。有没有办法做到这一点?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-11-24 22:49:50

我认为您是在要求Contacts Framework管理一些它设计不能处理的额外状态。您的"selected“状态标志在CNContact object上不可用(请参阅下面的CNKeyDescriptor列表),因此不能在选取器视图控制器中显示。

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

据我所知的CNKeyDescriptor列表:

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

Stack Overflow用户

发布于 2017-08-17 09:12:57

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

代码语言:javascript
复制
contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"!(identifier IN %@)", arrayOfPreviouslySelected];

下面是一个仅显示具有电子邮件地址的联系人的示例:

代码语言:javascript
复制
contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"!(identifier IN %@) && emailAddresses.@count > 0", arrayOfPreviouslySelected];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33171377

复制
相关文章

相似问题

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