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)
}