我有一个视图,它是tabBarController的一部分。在这个视图中,我有一个带有表格的子视图。单击此表中的单元格时,我想访问父视图的navigationController。这可能 - 如果是的话,怎么样?
我以为会是
BandDetailViewController *bandDetailViewController = [[BandDetailViewController alloc] initWithNibName:@"BandDetailViewController" bundle:nil];
bandDetailViewController.band = [thisDay objectAtIndex:indexPath.row];
[super.navigationController pushViewController:bandDetailViewController animated:YES];
[bandDetailViewController release];
但这不起作用。
答案 0 :(得分:10)
实例化子视图控制器时,传入对导航控制器(超级)的引用,并将其存储在实例变量中。然后,您可以在sub中需要时引用它。我一直在寻找一个更优雅的解决方案来解决这个问题和类似的问题,但没有成功。通过参考作品,所以我这样做,并尝试继续我的生活。
编辑:添加代码示例
在mainVC.m
中 // this might be in didSelectRowForIndexPath:
SubViewController *subVC = [[SubViewController alloc] init];
subVC.superNavController = self.navController;
[self.navigationController pushViewController:subVC animated:YES];
在SubViewController.h中
@property (nonatomic, retain) UINavigationController *superNavController;
在SubViewController.m
中 @synthesize superNavController;
// then, wherever you need it, say to pass to a sub-sub-viewController...
[self.superNavController pushViewController:myNewVC animated:YES];
答案 1 :(得分:0)
当你调用-pushViewController时,哪个视图控制器是自己的?如果您从其中一个标签子视图中调用该标签,则自己可能没有从您添加到其中的顶级视图中引用导航控制器。
请看一下这篇文章。这家伙看起来有同样的问题。