我有一个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/