我可以在一个UITableViewDelegate中使用多个segue吗?

时间:2012-09-06 15:30:30

标签: ios uitableview segue

我有一个 UITableView 列出了多种类型的对象,我想根据用户选择的对象类型来转换到不同的视图。

是否可以通过使用多个segue来实现,如果是这样,怎么做?

2 个答案:

答案 0 :(得分:17)

当然!通过从tableViewController (不是一行,tableViewController本身)中的拖动到下一个视图,在故事板上定义所有segue。给他们ID,以便你知道要拨打哪一个。当您可视化定义所有segue时,请转到代码。在tableView的委托中,在didSelectRowAtIndexPath中,只需通过选中indexPath.row来调用您想要的segue:

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

    switch (indexPath.row) {
        case 0: [self performSegueWithIdentifier:@"Segue0" sender:self];
                break;
        case 1: [self performSegueWithIdentifier:@"Segue1" sender:self];
                break;
        [...]
        default: break;
    }
}

这样,当用户选择第一行时,将触发ID为“Segue0”的segue,依此类推。

您还可以在[tableView deselectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] animated:YES];的开头添加行didSelectRowAtIndexPath,以便在用户触摸后该行不会保持选中状态!

编辑:这适用于静态和动态单元格!小心ctrl-拖动你的segue从tableViewController,而不是一个单元格!

答案 1 :(得分:0)

另一种实现方式是:

  • 在表视图中为您要存储的每种类型的对象创建一个专门的可重用prototypeCell(从对象库中拖出一个新的单元格对象,或者单击现有的默认对象并复制/粘贴) 。请记住为每个可重复使用的单元格填写唯一的标识符,稍后您需要能够区分它们 (可能打电话给

    [tableView dequeueReusableCellWithIdentifier:@“CellIdentifier0”];

里面

(UITableViewCell *)tableView(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath;
  • 按住Ctrl键并单击每个原型单元格,然后拖动以为每个原型单元格创建一个segue

  • segues会自动解雇,只需要在他们被解雇时处理它们

如果每个可重用单元都有一个转换,这很有用,这可能会涵盖很多情况。