您可以使用导航控制器 ( ) 的 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
,您可以向代理发送消息以关闭弹出框。