如果这与其他主题重复,我很抱歉。几个小时后,我已经仔细研究了十几个,但似乎没有一个适用于我的情况。即;
重要的是,我使用故事板和segues来做到这一点(这可能是问题的一部分!)
我已经尝试过实现自定义委托方法来做到这一点,但是我已经陷入了绝望的困境。主要是因为
a)实际的代表是两个级别的距离,我很难传达这个“上链”,就像它一样。 b)[segue destinationViewController]是navigationController。我不确定如何获取它包含的实际tableViews的钩子,检索或设置属性(例如委托)
这对任何人都有意义吗?回过头来看,这个问题几乎像我一样。如果你能解读它并提出任何建议,我将非常感激。
答案 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
中,您可以向代理发送消息以解除弹出窗口。