Как выбрать контактный номер телефона в iOS?

Я знаю, как выбрать контакт в 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];

Итак, я устанавливаю отображаемые свойства, но результат остается тем же, даже если я выбираю только 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");
}

2 ответа

Решение

Хорошо, вот ответ:

Прежде всего, используйте только свойство, которое вы хотите выбрать в displayedPropertyKeys (в этом случае это CNContactPhoneNumbersKey) и убедитесь, что реализованы ВСЕ делегированные методы (т.е. оба didSelectContact - если у контакта есть только один номер телефона, и didSelectContactProperty - если у контакта более одного номера телефона).

Кроме того, ограничьте выбор контакта, установив:

contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count > 0"];
contactPicker.predicateForSelectionOfContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count == 1"];
contactPicker.predicateForSelectionOfProperty = [NSPredicate predicateWithFormat:@"key == 'phoneNumbers'"];

Вам нужно установить displayedKeys собственность CNContactPicker, Если вы не установили никаких клавиш, вы можете выбрать только контакт. Если вы установите ключи, то вы выбираете контакт, затем вы выбираете желаемое свойство контакта.

Реализуйте соответствующие методы делегата для завершения процесса.

Другие вопросы по тегам