0

我有一个带有按钮主页的故事板,触摸一个按钮连接到一个带有嵌入式 tableviewcontroller 的导航控制器。当 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(详细信息),那么我想显示我的详细信息视图。

我的问题是,如果它是一个列表,我的列表不会填充项目。单元格行在那里,但是是空白的,它似乎没有使用我的单元格原型。

如果我做错了,我正在犹豫,并正在寻找有关如何完成我需要的建议。

谢谢你的帮助!!

4

1 回答 1

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来代替检查,这只是另一种检查转场去向的方法。classdestinationViewControllersegue.identifier

于 2012-10-19T14:24:40.663 回答