如何在作为导航控制器的插入视图的 tableview 中推送新的 viewController?

Posted

技术标签:

【中文标题】如何在作为导航控制器的插入视图的 tableview 中推送新的 viewController?【英文标题】:How to push a new viewController in a tableview which is a inserted view of a navigationcontroller? 【发布时间】:2011-05-08 03:00:35 【问题描述】:

我有一个 HomeViewController.m,我在其中通过 self.navigationController 推送 SpecificViewController,

 SpecificViewController *specificViewController= [[SpecificViewController alloc] initWithNibName:@"SpecificViewController" bundle:nil];  
 [self.navigationController pushViewController:specificViewController animated:YES];

在 SpecificViewController.m 中插入一个子视图

FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self.view insertSubview:firstViewController.view atIndex:0];

在FirstViewController.m 中,有一个tableview。问题是如何通过navigationController推送新的ViewController,我在下面尝试过,但它不起作用。

-(void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath    

 DetailTableViewController *detail = 
 [[DetailTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
 [self.navigationController pushViewController:detail animated:YES];
 [detail release];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];

我还是尝试了新的 UINavigationController,

UINavigationController *NEWnavigationController;
NEWnavigationController=[[UINavigationController alloc] init];                
[NEWnavigationController pushViewController:detail animated:YES];

但它仍然没有工作。你能给我什么建议吗?

【问题讨论】:

【参考方案1】:

你的方法有很多问题。

首先,SpecificViewController 是您加载的第一个视图控制器吗?如果是,则不要推送此视图控制器,而是将其设置为应用程序委托中的根视图控制器,如下所示

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:[[SpecificViewController alloc] init];

这将确保您的导航控制器已设置并且出现的第一个视图控制器是 SpecificViewController

其次,您不插入视图控制器作为子视图。如果您尝试加载第二个视图控制器,则将其推送到导航控制器堆栈上。您可以从 SpecificViewController 执行此操作,如下所示

FirstViewController *firstViewController =[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

[self.navigationController pushViewController:firstViewController animated:YES];

【讨论】:

以上是关于如何在作为导航控制器的插入视图的 tableview 中推送新的 viewController?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5 XCODE 4.3.2 故事板。如何在现有表视图之前插入新视图?

插入 UIImageView 作为子视图滞后

快速在表格视图中插入单元格

如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图

iPhone - 如何将导航控制器添加到视图?

如何使用导航控制器调用视图控制器