在 MyViewController
,我要求用户从通讯录中选择一个人:(单击按钮)
peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;
[self presentViewController:peoplePicker animated:YES completion:NULL];
如果用户选择一个拥有多个电话号码的人,我将展示一个新的 UITableViewController,它允许用户选择一个电话号码:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
// ...
next = [[ChoosePersonPhoneViewController alloc] initWithStyle:UITableViewStyleGrouped personPhoneInfoArray:personPhoneInfos];
[peoplePicker pushViewController:next animated:YES];
// ...
}
当用户选择电话号码时,我想将该电话号码带回原始 ViewController 并关闭
ABPeoplePickerNavigationController
和 ChoosePersonPhoneViewController
.两个问题:
ChoosePersonPhoneViewController
中关闭两个 View Controller ? MyViewController
来自ChoosePersonPhoneViewController
? 我的猜测是:
ABPeoplePickerNavigationController *peoplePicker = (ABPeoplePickerNavigationController *)self.navigationController;
MyViewController *nsvc = (MyViewController *)peoplePicker.presentingViewController;
我尝试了许多使用
parentViewController
的组合和 presentingViewController
和 popViewController
/dismissViewController
,但无法真正弄清楚 - 我不断收到异常,这表明我对 View Controller 层次结构缺乏了解。我将不胜感激一些指针或至少 RTFM 链接。
最佳答案
一旦你回答了第二个问题,你的第一个问题就变得容易了。在ChoosePersonPhoneViewController 中,有一个与myViewController 相同类的属性,命名为parent,当你从myViewController 分配ChoosePersonPhoneViewController 时,将其设置为self,就像你将delegate 设置为self。一旦设置了父对象,您就可以从子对象调用父对象中的方法。
关于iphone - 如何访问 View Controller 的父级并正确关闭 self 和 self.parent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530213/