我有一个 UITableView 列出了多种类型的对象,我想根据用户选择的对象类型来转换到不同的视图。
是否可以通过使用多个segue来实现,如果是这样,怎么做?
答案 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会自动解雇,只需要在他们被解雇时处理它们
如果每个可重用单元都有一个转换,这很有用,这可能会涵盖很多情况。