我有一个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方法中,我可以看到它。所以我不明白为什么我不能推它。
有什么想法吗?
答案 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];
}
您当前代码无法正常工作的原因可能是由于以下原因:
答案 1 :(得分:0)
您分配并初始化myViewController但从未将其推送到导航或窗口或其他任何内容,然后将sCont推送到myViewController,即窗口中不存在。首先,尝试不使用myViewController,接下来尝试在将sCont推入导航之前将myViewController推送到导航。