我可以用一个UITableViewDelegate使用多个segues吗?

我有一个UITableView列出多种types的对象,我想继续不同的视图取决于用户select哪种types的对象。

有可能通过使用多个赛段来做到这一点,如果是这样,如何呢?

当然 ! 通过从tableViewController (不是一行,tableViewController本身)拖动到下一个视图来定义你的故事板上所有的游戏。 给他们ID,所以你知道哪一个要打电话。 当你所有的赛段都是可视化定义的,请转到代码。 在你的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; } } 

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

你也可以添加下面这行: [tableView deselectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] animated:YES];didSelectRowAtIndexPath的开头,所以行不会在用户触摸后保持选中!

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

另一种实现方式是:

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

    [tableView dequeueReusableCellWithIdentifier:@“CellIdentifier0”];

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

  • 塞格会被自动解雇,只要在他们被解雇时处理

如果每个可重用单元有一个单独的转换,这很有可能覆盖很多情况。