从UITableView显示DetailView

时间:2012-05-02 10:24:54

标签: ios uitableview uiviewcontroller

我有一个纵向的应用程序,在我的视图控制器(UIViewController中,而不是UITableViewController)有一个表(UITableView)只占用屏幕的一半。 我将表视图的委托和数据源设置为我的视图控制器。

现在,我想在选择桌子的任何单元格时显示详细视图。这是我尝试但没有出现的内容:

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

NSLog(@"SELECTED");

//ChangeView

DetailViewController *dvController = [[DetailViewController alloc]
initWithNibName:@"DetailViewController" bundle:nil];

[self.navigationController pushViewController:dvController animated:YES];
dvController = nil;

}

有什么想法吗?这个解决方案比弹出解决方案更好吗?

5 个答案:

答案 0 :(得分:2)

[NSBundle mainBundle]代替零。希望能帮助到你。告诉我发生了什么! 同时将dvController=nil;替换为[dvController release];

修改 用这个替换你的初始化函数:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
return self;
}

答案 1 :(得分:2)

您应该在nib文件中查看您的tableview数据源和委托是否已连接? 只需与文件所有者连接即可。

如果你正在使用uiview控制器,那么使用现有的模型视图控制器而不是推模型视图控制器。

DetailViewController *dvc=[[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];
[self presentModalViewController:dvc animated:YES];

答案 2 :(得分:1)

初始化导航控制器。因为ui组件尚未初始化,所以有一段时间了。但请记住,您可能不得不面对其他一些UI问题

答案 3 :(得分:1)

当你选择一个表格单元格时,你应该检查是否真的被调用didSelectRowAtIndexPath(不是,你的委托可能没有正确设置),如果

DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

使用调试器返回nil或者有意义的东西,尝试关闭问题。另外,@ M.A.Khan是对的,你应该删除

dvController = nil;

并将其替换为

[dvController release];

在主视图中放弃参考。

修改 你的代码在你的UIViewController下面,因为你正在使用[self.navigationController pushViewController],所以有一个UINavigationController。如果没有,难怪你的观点不会被推到不存在的东西上。

答案 4 :(得分:0)

是一个带导航控制器中的tableview的viewcontroller吗?如果不是,那么首先你必须创建一个带有当前viewcontroller的navigationcontroller作为rootviewcontroller。然后尝试使用你现在正在使用的代码