1

ではMyViewController、ユーザーにアドレス帳から人を選択するように求めます: (ボタンのクリックで)

peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;
[self presentViewController:peoplePicker animated:YES completion:NULL];

ユーザーが複数の電話番号を持つ人を選択した場合、ユーザーが電話番号の 1 つを選択できるようにする新しい UITableViewController を提示します。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
    // ...
    next = [[ChoosePersonPhoneViewController alloc] initWithStyle:UITableViewStyleGrouped personPhoneInfoArray:personPhoneInfos];
    [peoplePicker pushViewController:next animated:YES];
    // ...
}

ユーザーが電話番号を選択したら、その電話番号を元の ViewController に戻し、 と の両方ABPeoplePickerNavigationControllerを閉じたいと思いChoosePersonPhoneViewControllerます。

2 つの質問:

  • 内から両方のView Controllerを閉じるにはどうすればよいChoosePersonPhoneViewControllerですか?
  • MyViewController内からアクセスするにはどうすればよいChoosePersonPhoneViewControllerですか?

私の推測では、次のようになります。

ABPeoplePickerNavigationController *peoplePicker = (ABPeoplePickerNavigationController *)self.navigationController;
MyViewController *nsvc = (MyViewController *)peoplePicker.presentingViewController;

parentViewControllerandpresentingViewControllerpopViewController/を使用して多くの組み合わせを試しましdismissViewControllerたが、実際には理解できません.View Controller階層の理解が不足していることを示す例外が発生し続けています。いくつかのポインタまたは少なくとも RTFM リンクをいただければ幸いです。

4

3 に答える 3

1

2 番目の質問に答えると、最初の質問は簡単になります。ChoosePersonPhoneViewController には、parent という名前の myViewController と同じクラスのプロパティがあり、myViewController から ChoosePersonPhoneViewController を割り当てるときに、デリゲートを self に設定するのと同じように、それを self に設定します。親が設定されると、子オブジェクトから親のメソッドを呼び出すことができます。

于 2013-05-13T20:11:30.477 に答える
1

which Apple doc に次のように記載されているページChoosePersonPhoneViewControllerにアクセスしてみてください。presentingViewController

このプロパティは、最も近い先祖を表すView Controllerを保持します

したがって、何かを試すことができます[ChoosePersonPhoneViewController.presentingViewController dismissModalViewControllerAnimated:YES](この方法は iOS 6 では廃止されていることに注意してください)。

于 2013-05-13T20:11:44.913 に答える