当predicateForSelectionOfContact导致选择联系人时,如何在CNContactPickerViewController()上触发委托

时间:2016-03-11 21:11:39

标签: ios objective-c nspredicate contacts

我尝试使用iOS9中的Contacts API将手机选择添加到iOS应用中。它应该调出CNContactsPickerViewController并让用户只选择至少有一个电话号码关联的联系人。

如果有多个电话号码,系统会提示用户选择哪一个。

如果只有一个,只需从初始列表中选择联系人即可选择联系人。

行为几乎是正确的。我不被允许选择没有电话号码的联系人。如果我选择多个电话的联系人,系统会提示我选择一个,并调用该委托。如果我选择具有一个电话号码的联系人,则会返回,但不会调用任何代表。

我怀疑我需要为NSPredicate添加predicateForSelectionOfProperty,但我找不到任何查询CNContactProperty的格式。如果是,那么predicateForSelectionOfProperty的适当谓词是什么,或者如果不是,我错过了什么?

- (void)initiateIdSelectionViaContacts
{
    CNContactPickerViewController *picker = [[CNContactPickerViewController alloc] init];
    NSArray *propertyKeys = @[CNContactPhoneNumbersKey, CNContactGivenNameKey, CNContactFamilyNameKey, CNContactOrganizationNameKey];
    NSPredicate *enablePredicate = [NSPredicate predicateWithFormat:@"(phoneNumbers.@count > 0)"];
    NSPredicate *contactSelectionPredicate = [NSPredicate predicateWithFormat:@"phoneNumbers.@count == 1"];

    picker.displayedPropertyKeys = propertyKeys;
    picker.predicateForEnablingContact = enablePredicate;
    picker.predicateForSelectionOfContact = contactSelectionPredicate;
    picker.delegate = self;

    [self presentViewController:picker animated:YES completion:nil];
}

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
{
}

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty
{
}

0 个答案:

没有答案