我有一个UIViewController,该控制器包含在navigationController中。
我在此viewController中添加一个UITableViewController。当我按下tableView的单元格时,我想调用pushViewController方法。

我尝试了这个:

UITableViewController


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  FirstView *myViewController = [[FirstView alloc] init];
  [f myViewController];
}


UIViewController(FirstView)


-(void)pushIt
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    NSLog(@"didSelect"); // is printed
    [sCont release];
    sCont = nil;
}



但是什么也没发生。我将NSLog()放入pushIt方法中,可以看到它。所以我不明白为什么我不能推动它。

任何的想法?

最佳答案

UIViewController具有一个名为navigationController的属性,如果从其调用的视图控制器存在该属性,它将返回一个UINavigationController

使用此属性,可以从表视图的didSelectRowAtIndexPath:方法将视图控制器推入导航堆栈。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    [sCont release];
}


您当前的代码无法正常工作的原因可能是由于以下原因:


正如您所说的,您已经有一个FirstViewController实例,您已经添加了一个表格视图作为其子视图。
您尝试在用户点击导航堆栈上不在的单元格时创建FirstViewController的新实例,因此尝试将视图控制器从那里推到堆栈上是行不通的,因为navigationController属性返回零。

关于iphone - 在viewController中使用带有tableViewController的pushViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2235464/

10-10 06:25