pushViewController与viewController中的tableViewController

时间:2010-02-10 08:53:44

标签: iphone uiviewcontroller uinavigationcontroller uitableview pushviewcontroller

我有一个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方法中,我可以看到它。所以我不明白为什么我不能推它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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的新实例,因此尝试将视图控制器从那里推送到堆栈上不起作用,因为{{ 1}} property返回nil。

答案 1 :(得分:0)

您分配并初始化myViewController但从未将其推送到导航或窗口或其他任何内容,然后将sCont推送到myViewController,即窗口中不存在。首先,尝试不使用myViewController,接下来尝试在将sCont推入导航之前将myViewController推送到导航。