2015-10-16 91 views
4

我使用新的CNContactPickerViewController從地址簿中選擇聯繫人並在我的應用中使用它們。iOS9 - CNContactPickerViewController:預選聯繫人

當我按下一個按鈕,我把這個代碼:

let contactPicker = CNContactPickerViewController() 
     contactPicker.delegate = self 
     contactPicker.predicateForEnablingContact = NSPredicate(format: "[email protected] > 0") 
     presentViewController(contactPicker, animated: true, completion: nil) 

而且我用下面的CNContactPickerDelegate的方法來選擇多個聯繫人:

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

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

} 

這可以幫助我填寫名爲「selectedRecipients數組「(基本上,電子郵件地址字符串的浪花)

這裏是結果: enter image description here

這工作正常。但是,如果我之前選擇了聯繫人,我希望contactPicker在初始化聯繫人時預先選擇聯繫人,也就是說,在聯繫人出現時顯示聯繫人。 有沒有辦法做到這一點?

感謝

回答

1

我想你問的聯繫人框架來管理,它不是設計來處理一些額外的狀態。您的「選定」狀態標記在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 
+0

這的確是標準的CNContactPickerViewController(在模擬器中)。 感謝您的CNKeyDescriptors列表,始終有用。 –

1

使用謂詞。保持先前選擇的CNContact標識符數組,然後把這樣的斷言:在輸入電子郵件地址

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

和示例,只顯示聯繫人:

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

感謝您的回答。您的解決方案禁用先前選定的聯繫人我想要的是在聯繫人選擇器出現時將他們顯示爲選中的方式。 –