IOS StoryBoard来自TableCell的多个Segue

Bea*_*ear 48 storyboard ios segue

嗨,我有一个故事板,能够在单击表格单元格时显示详细视图.我想添加额外的功能,以便根据我点击的单元格显示不同的视图控制器.我尝试从同一个单元格拖动两个segue但它不允许它.

我的想法是,我将从单元格中有两个segue,每个指向不同的视图,然后调用所需的segue:

- (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");

    }

} 
Run Code Online (Sandbox Code Playgroud)

然后我会在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");
    }

}
Run Code Online (Sandbox Code Playgroud)

但它从未显示第二个视图.这是因为它不可能有来自单个表格单元格的两个segue.我也尝试将两个segue从控制器拖到每个目的地而不是一个来自单元格,一个来自控制器但是没有运气?

LJ *_*son 67

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

  • 这必须奏效.我一直这样做.现在删除您对该VC的Segues并将其添加回来,确保将每个segue连接到VC本身.然后你可以调用[self performSegueWithIdentifier:@"segueID"sender:nil]; 在didSelectRowAtIndexPath上. (12认同)
  • 甜!我不知道你可以从视图控制器中获得segue,我认为它们只能像按钮或类似物一样.:)我现在更喜欢segues了. (4认同)

mgr*_*ndi 46

不要尝试从TableCell创建多个segue到其他视图控制器,您想要从故事板界面中的视图控制器下方的视图控制器图标ctrl +拖动到要转移到的视图控制器.然后它将允许您设置多个segues.

显示多个segues的屏幕截图

然后要实际使segue工作,你需要为segues本身添加标识符,你可以点击它们然后在属性检查器中给它一个名字:

给segue一个标识符

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

-tableView:didSelectRowAtIndexPath: 
Run Code Online (Sandbox Code Playgroud)

您可以使用

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
Run Code Online (Sandbox Code Playgroud)

根据你自己选择segue的逻辑手动启动一个segue.