我有一个纵向的应用程序,在我的视图控制器(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;
}
有什么想法吗?这个解决方案比弹出解决方案更好吗?
答案 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。然后尝试使用你现在正在使用的代码