0

如果这与其他线程重复,我很抱歉。我已经仔细研究了十几个,几个小时,但似乎没有一个完全适用于我的情况。即;

  1. 一个按钮显示一个弹出框
  2. 弹出框包含一个表格视图,嵌套在导航控制器中
  3. 用户导航到导航控制器的第二级(第二个 tableViewController),然后进行选择
  4. 做出选择后,弹出框应关闭,并将 indexPath.row 传递回原始屏幕。

重要的是,我正在使用故事板和转场来做到这一点(这可能是问题的一部分!)

我已经尝试实现自定义委托方法来做到这一点,但我陷入了无可救药的纠结之中。主要是因为

a) 实际的代表在两层之外,我在传达这个“链上”时遇到了麻烦,事实上。b) [segue destinationViewController] 是导航控制器。我不确定如何钩入它包含的实际 tableViews,以检索或设置属性(例如委托)

这对任何人都有意义吗?回想起来,这个问题几乎和我一样被迷惑了。如果你能破译它,并有任何建议,我将非常感激。

4

1 回答 1

0

您可以使用导航控制器 ( ) 的 viewControllers 属性访问实际的视图控制器(具有您的表格视图segue.destinationViewController)。一旦你有一个指向这个视图控制器的指针,设置它的委托。然后在 中tableView:didSelectRowAtIndexPath,通知委托人选择了某些内容,委托人可以关闭弹出框。

编辑:这可能在您的 prepareForSegue 中:

UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; // cast the destination to UINavigationController

SpeciesTableViewController *speciesViewController = [navigationController.viewControllers lastObject];
speciesViewController.delegate = self;

viewControllers关于UINavigationController 属性的Apple 文档:

当前在导航堆栈上的视图控制器。. . . 根视图控制器在数组中的索引 0 处,后视图控制器在索引 n-2 处,顶部控制器在索引 n-1 处,其中 n 是数组中的项目数。

使用 segue 时,根视图控制器是唯一的视图控制器,因此 lastObject 始终返回根视图控制器。

现在,请记住,当您在 SpeciesTableViewController 中选择一个物种时,您会触发一个 segue,并且必须设置 SpeciesDetailViewController 的委托。在 SpeciesDetailViewController 中didSelectRowForIndexPath,您可以向代理发送消息以关闭弹出框。

于 2012-08-24T19:25:47.883 回答