7

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

是否可以通过使用多个 segues 来做到这一点,如果可以,怎么做?

4

2 回答 2

17

当然 !通过从 tableViewController(不是一行,tableViewController 本身)拖到下一个视图来定义故事板上的所有 segue 。给他们ID,这样你就知道该打电话给哪个了。当您的所有转场都以可视方式定义后,请转到代码。在你的 tableView 的委托中didSelectRowAtIndexPath,只需调用你想要的 segue,通过检查indexPath.row

- (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

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

于 2012-09-06T15:39:32.113 回答
0

另一种实现方式是:

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

    [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier0"];

里面

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

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

如果每个可重复使用的单元格有一个转换,这很有效,这可能涵盖许多情况。

于 2012-09-06T17:24:43.627 回答