Я почти в отчаянии, так как я ищу решение в течение нескольких недель.
Проблема проста:
- С помощью ABPeoplePickerNavigationController (как ModalView) необходимо выбрать человека.
- Тогда должны отображаться только (например) почтовые адреса, а пользователь должен выбрать один.
- После выбора почтового адреса должны быть показаны только (например) номера телефонов, а пользователь должен выбрать один.
Решение до третьего аспекта хорошо известно:
- (IBAction)importFromAddressBook
{
ABPeoplePickerNavigationController* picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
[peoplePicker setDisplayedProperties:[NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonEmailProperty]]];
return YES;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
//===PROBLEM=== Now I do have a mail address and I want to have a phone number right afterwards.
//Something like this would be straightforward, but the view does not change this way:
[peoplePicker setDisplayedProperties:[NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]]];
//Here misses the important code.
//And only when I also got a phone number through this or a similar method I want to call:
[peoplePicker dismissModalViewControllerAnimated:YES];
//I do not want to start default behaviour with the mailaddress and/or phone number:
return NO;
}
Правильный подход, похоже, подталкивает аналогичное представление выбора людей на NavigationController в ModalView, но я не знаю, как.
Если бы у кого-нибудь была идея, было бы здорово!
Если вы хотите увидеть такое поведение в действии, вы можете взглянуть на приложение Amazon: если вы проходите первые шаги заказа, вы можете выбрать адрес доставки именно таким образом: Из списка контактов -> Выберите Персона -> Выберите адрес -> Выберите номер телефона.
Там все (кажется) имеет место в модальном представлении только с иерархией навигации с еще одним уровнем, чем в стандартном коде, показанном выше.