Eir*_*Eir 4 ios cncontactpicker
我知道如何在iOS中选择联系人(使用CNContactPickerViewController),但我如何为联系人选择特定的电话号码,而不是整个联系人本身?根据文档,这应该是可能的,但我没有发现如何.
编辑:这是我的代码
CNContactPickerViewController *contactPicker = [[CNContactPickerViewController alloc] init];
contactPicker.delegate = self;
contactPicker.displayedPropertyKeys = @[CNContactGivenNameKey, CNContactImageDataAvailableKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactThumbnailImageDataKey, CNContactIdentifierKey];
[self presentViewController:contactPicker animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
所以,我确实设置了displayProperties,但结果是一样的,即使我只选择了CNContactPhoneNumbersKey,我也没有提供所有联系人的号码,以便我可以选择一个特定的号码.
我错过了什么?
编辑2:请求的回调方法.我不知道它们有多重要,但不过.
-(void) contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
//NSLog(@"Contact : %@",contact);
NSString* contactName = [NSString stringWithFormat:@"%@%@%@", contact.givenName, @" ", contact.familyName];
[currentButton setTitle:contactName forState:UIControlStateNormal];
[currentName setText:contactName];
...
}
-(void) contactPickerDidCancel:(CNContactPickerViewController *)picker {
//NSLog(@"Cancelled");
}
Run Code Online (Sandbox Code Playgroud)
好的,这是答案:
首先,只使用你想要选择的属性displayedPropertyKeys(在这种情况下CNContactPhoneNumbersKey),并确保实现所有委托方法(即两者didSelectContact- 当联系人只有一个电话号码时,didSelectContactProperty- 当联系人有不止一个电话号码).
此外,通过设置限制联系人选择:
contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count > 0"];
contactPicker.predicateForSelectionOfContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count == 1"];
contactPicker.predicateForSelectionOfProperty = [NSPredicate predicateWithFormat:@"key == 'phoneNumbers'"];
Run Code Online (Sandbox Code Playgroud)