IOS的StoryBoard多个Segue的TableCell

嗨,我有一个故事板,并能够显示单击表格单元格时的细节视图。 我想添加额外的function,以便取决于我点击什么单元格我显示一个不同的视图控制器。 我尝试从同一个单元格中拖出两个segues,但不允许。

我的想法是,我会有两个单元格,每个指向不同的视图,然后调用所需的继续:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSInteger row = indexPath.row; NSLog(@"Selected Item :-) %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:row]]); if(row %2 ==0){ NSLog(@"Even"); [self performSegueWithIdentifier:@"ShowSecondIndex" sender:self]; }else{ [self performSegueWithIdentifier:@"ShowSelectedMovie" sender:self]; NSLog(@"Odd"); } } 

然后我会在prepareForSegue中处理这个segue

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSLog(@"Prepare For Segue ID:%@",[segue identifier]); if([[segue identifier] isEqualToString:@"ShowSelectedMovie"]){ Tab2_ItemViewController *vc = [segue destinationViewController]; NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row]; NSLog(@"Selected Index: %d",selectedIndex); [vc setSelectedItem: [NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]]; NSLog(@"String Value: %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]); [vc setSelectedIndex:selectedIndex]; }else if([[segue identifier] isEqualToString:@"ShowSecondIndex"]){ NSLog(@"Viewing Second Index"); } } 

然而,它从来没有显示第二种观点。 这是因为它不可能有一个表格单元格中的两个segues。 我也尝试从控制器拖动两个赛格的每个目的地,而不是从单元格和一个从控制器,但没有运气?

在这种情况下,不要尝试将Segues连接到tableviewcell。 将它们连接到View Controller本身。

不要尝试从TableCell中创build多个segse到其他视图控制器,您想要从Storyboard界面中的视图控制器下方的视图控制器图标按Ctrl +拖动到您想要继续的视图控制器。 那么它将允许你设置多个赛段。

显示多个赛段的截图

然后为了让这个segues起作用,你需要为segues自己添加标识符,你可以点击它们,然后在属性检查器中给它一个名字:

给一个标识符

那么,对于TableCells的例子,在你的UITableViewDelegate中

 -tableView:didSelectRowAtIndexPath: 

您可以使用

 - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

根据你自己的逻辑select什么样的segue来手动启动一个segue。

这里是我的演示项目的示例代码:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *segueName = nil; if (type == kCore) { segueName = @"segue1"; } else if (type == kStdlib) { segueName = @"segue2"; } [self performSegueWithIdentifier: segueName sender: self]; } 

type是视图控制器的一个属性,它决定了哪个segue应该被执行。

正如上面的答案所说,关键是通过链接两个视图控制器来创buildsegue。

在迅速的3.1,与两个国家的部分控制

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { var segue: String! if selectedSegment == 0 { segue = "segue1" } else { segue = "segue2" } self.performSegue(withIdentifier: segue, sender: self) 

}