何週間も解決策を探しているので、私は絶望に近づいています。
問題は単純です:
- ABPeoplePickerNavigationController (ModalView として) を介して、人物を選択する必要があります。
- 次に、(たとえば) メール アドレスのみが表示され、ユーザーはいずれかを選択する必要があります。
- メール アドレスを選択すると、(例) 電話番号だけが表示され、ユーザーは 1 つを選択する必要があります。
3番目の側面までの解決策はよく知られています:
- (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;
}
正しいアプローチは、ModalView の NavigationController に同様の peoplePicker View をプッシュするようですが、方法がわかりません。
誰かが何か考えていたら、それは素晴らしいことです!
このような動作を確認したい場合は、Amazon アプリをご覧ください: 注文の最初のステップを実行する場合は、次の方法で配送先住所を選択できます: 連絡先リストから -> 人を選択 ->住所を選択 -> 電話番号を選択します。そこでは、上に示した標準コードよりも 1 つ多いレベルのナビゲーション階層を持つモーダル ビューですべてが行われているようです。