ChoosePersonPhoneViewController

ChoosePersonPhoneViewController

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并关闭ABPeoplePickerNavigationControllerChoosePersonPhoneViewController

两个问题:
  • 如何从ChoosePersonPhoneViewController中关闭两个视图控制器?
  • 如何从MyViewController中访问ChoosePersonPhoneViewController

  • 我的猜测是:
    ABPeoplePickerNavigationController *peoplePicker = (ABPeoplePickerNavigationController *)self.navigationController;
    MyViewController *nsvc = (MyViewController *)peoplePicker.presentingViewController;
    

    我已经尝试使用parentViewControllerpresentingViewController以及popViewController / dismissViewController进行了许多组合,但无法真正弄清楚-我不断收到异常,这表明我缺乏对视图控制器层次结构的了解。我将不胜感激某些指针或至少RTFM链接。

    最佳答案

    回答完第二个问题后,第一个问题就变得容易了。在ChoosePersonPhoneViewController中,拥有与名为myparent的myViewController相同的类的属性,并且当您从myViewController分配ChoosePersonPhoneViewController时,将其设置为self,就像将委托设置为self一样。设置父对象后,您可以从子对象中调用父对象中的方法。

    10-08 05:50