0

我有一个纵向应用程序,在我的视图控制器(UIViewController而不是 a 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;

}

任何的想法?这个解决方案比弹出解决方案更好吗?

4

5 回答 5

2

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

编辑: 用这个替换你的初始化函数:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
return self;
}
于 2012-05-02T10:30:50.853 回答
2

您应该在 nib 文件中检查您的表格视图,它的数据源和委托是否已连接?只需将两者与文件所有者连接即可。

如果您使用的是 uiview 控制器,则使用当前模型视图控制器而不是推送模型视图控制器。

DetailViewController *dvc=[[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];
[self presentModalViewController:dvc animated:YES];
于 2012-05-02T10:32:08.450 回答
1

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

于 2012-05-02T10:50:03.207 回答
1

当您选择表格单元格时,您应该检查是否didSelectRowAtIndexPath真的被调用(如果不是,您的委托可能未正确设置),然后如果

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

返回 nil 或对调试器有意义的东西,试图解决问题。另外,@MAKhan 是对的,您应该删除

dvController = nil;

并将其替换为

[dvController release];

放弃主视图中的参考。

编辑: 您的代码假定在您的 UIViewController 下方,有一个 UINavigationController 因为您使用的是[self.navigationController pushViewController]. 如果没有,难怪你的观点不会被推到不存在的东西上。

于 2012-05-02T11:01:21.423 回答
0

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

于 2012-05-02T10:45:40.920 回答