从表格选择中删除弹出窗口

时间:2012-08-24 17:19:56

标签: objective-c

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

  1. 一个按钮显示一个popover
  2. popover包含一个嵌套在导航控件中的表视图
  3. 用户导航到导航控制器的第二级(第二个tableViewController),然后进行选择
  4. 进行选择后,popover应解除,并将indexPath.row传回原始屏幕。
  5. 重要的是,我使用故事板和segues来做到这一点(这可能是问题的一部分!)

    我已经尝试过实现自定义委托方法来做到这一点,但是我已经陷入了绝望的困境。主要是因为

    a)实际的代表是两个级别的距离,我很难传达这个“上链”,就像它一样。 b)[segue destinationViewController]是navigationController。我不确定如何获取它包含的实际tableViews的钩子,检索或设置属性(例如委托)

    这对任何人都有意义吗?回过头来看,这个问题几乎像我一样。如果你能解读它并提出任何建议,我将非常感激。

1 个答案:

答案 0 :(得分: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;

Apple关于UINavigationController的viewControllers属性的文档:

  

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

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

现在,请记住,当您在SpeciesTableViewController中选择一个物种时,您将触发一个segue,并且必须设置SpeciesDetailViewController的委托。在SpeciesDetailViewController' s didSelectRowForIndexPath中,您可以向代理发送消息以解除弹出窗口。