我有一个带有按钮主页的故事板,触摸一个带有嵌入式tableviewcontroller的导航控制器的按钮。当tableview出现时,它会填充一个项目列表。当用户触摸列表中的项目时,我想推送另一个tableview或详细信息视图。
这是我正在做的事情:
在我的ListTableViewController中,我这是我的didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
int row = [indexPath row];
DSObject * obj = _m_DSObjects[row];
if (obj.nType == 1)
{
ListTableViewController * tvc = [[ListTableViewController alloc]
initWithStyle:UITableViewStylePlain];
[self.navigationController pushViewController:tvc animated:YES];
}
else
{
MyDetaisViewController * vc = [[MyDetaisViewController alloc]
initWithStyle:UITableViewStylePlain];
[self.navigationController pushViewController:vc animated:YES];
}
}
基本上如果它是类型1(另一个列表),那么我想创建另一个ListViewController,但如果它是类型2,(详细信息),那么我想显示我的详细信息视图。
我的问题是,如果它是一个列表,我的列表不会填充这些项目。单元格行在那里,但是它们是空白的,它似乎没有使用我的单元格原型。
如果我做错了,我正在寻找关于如何完成我需要的建议。
感谢您的帮助!!
答案 0 :(得分:1)
更好的方法,因为您已经在使用故事板,就是从ListTableViewController
创建一个segue到您的新列表控制器,以及您的详细视图控制器。
然后您可以将didSelectRowAtIndexPath
更改为以下内容:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
int row = [indexPath row];
DSObject * obj = _m_DSObjects[row];
if (obj.nType == 1)
{
// assuming you named your segue "PresentListController"
[self performSegueWithIdentifier:@"PresentListController" sender:self];
}
else
{ // assuming you named your segue "PresentDetailsController"
[self performSegueWithIdentifier:@"PresentDetailsController" sender:self];
}
}
如果您需要将参数传递给其中任何参数,可以使用prepareForSegue
:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController isKindOfClass:[ListTableViewController class]]) {
ListTableViewController* listController = (ListTableViewController*)segue.destinationViewController;
listController.someParam = someValue;
return;
}
if ([segue.destinationViewController isKindOfClass:[MyDetailsViewController class]]) {
MyDetailsViewController* detailsController = (MyDetailsViewController*)segue.destinationViewController;
detailsController.someOtherParam = someOtherValue;
return;
}
}
修改强>
在prepareForSegue
而不是检查class
的{{1}},您可以使用destinationViewController
检查正确的segue,只是另一种方法来检查segue的去向