0

我有一个 UISplitViewController,主控器在 UINavigationController 中嵌入了一个 UIViewController。工具栏按钮负责通过 segue 启动 UIPopoverController。这样的弹出框控制器包装了一个 UIViewController,它也嵌入在 UINavigationController 中,称为 SettingsViewController。

我可以从 UIStoryboardPopoverSegue 获得指向 UIPopoverController 的指针:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender
{
  if ([segue.identifier isEqualToString:@"Settings"]) {
    UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue*) segue;

    SettingsViewController *settingsViewController = ... // TODO
    settingsViewController.popoverController = popoverSegue.popoverController;
  }
}

但我找不到获取对内部 SettingsViewController 的引用的方法。我不想使用可通过类方法访问的静态字段,这将是一个糟糕的解决方法。

我错过了什么才能让它正确?

谢谢你的帮助!

4

2 回答 2

5

UIPopoverSegue 包含一个 UIPopoverController

UIPopoverController *popoverController = popoverSegue.popoverController;

有了这个,您可以轻松获取 contentViewController(弹出窗口中显示的视图)

UINavigationController *contentNC = (UINavigationController *) popoverController.contentViewController;

从内容导航控制器中,您可以获得实际的视图控制器:

SettingsViewController *settingsVC = [contentNC.viewControllers lastObject];

这能解决你的问题吗?

于 2012-08-22T16:13:54.733 回答
0

如问题开头所述,我的应用程序中有一个非常相似的设置。

在我的prepareForSegue(以及我检查的内部segue.identifier)中,我抓取并在弹出框的视图控制器上设置了一些东西,如下所示:

settingsViewController *settingsPop = segue.destinationViewController;
settingsPop.someVar = self.var;

segue.destinationViewController使它变得简单易行。

于 2013-09-16T02:41:09.327 回答