8

我有一个视图,它是 tabBarController 的一部分。在这个视图中,我有一个带有表格的子视图。单击此表中的单元格时,我想访问父视图的 navigationController。这是可能的 - 如果是这样,怎么做?

我以为会

BandDetailViewController *bandDetailViewController = [[BandDetailViewController alloc] initWithNibName:@"BandDetailViewController" bundle:nil];
bandDetailViewController.band = [thisDay objectAtIndex:indexPath.row];

[super.navigationController pushViewController:bandDetailViewController animated:YES];
[bandDetailViewController release];

但这不起作用。

4

2 回答 2

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];
于 2011-02-20T17:13:14.933 回答
0

当你调用 -pushViewController 时,哪个视图控制器是 self?如果您在其中一个选项卡子视图中调用它,则 self 可能没有从您添加到的顶级视图中对导航控制器的引用。

请看一下这篇文章。这家伙看起来也有同样的问题。

无法为子视图 pushViewController

于 2011-02-20T16:21:21.363 回答