IOS故事板多段';它来自一间桌子间

IOS故事板多段';它来自一间桌子间,ios,storyboard,segue,Ios,Storyboard,Segue,嗨,我有一个故事板,能够在点击表格单元格时显示细节视图。我想添加额外的功能,以便根据单击的单元格显示不同的视图控制器。我试着从同一个单元格中拖出两段,但它不允许 我的想法是,我将从单元格中获得两个segue,每个segue指向不同的视图,然后调用所需的segue: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSInteger row = in

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

我的想法是,我将从单元格中获得两个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");

    }

} 
然后我会在prepareForSegue中处理这个环节

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

}

然而,它从未显示第二种视图。这是因为不可能从一个表单元格中有两个分段。我还尝试将两个segue从控制器拖到每个目的地,而不是从单元格拖一个,从控制器拖一个,但是运气不好???

在这种情况下,不要尝试将segue连接到tableviewcell。将它们连接到视图控制器本身。

不要尝试创建从TableCell到其他视图控制器的多个分段,您要按住ctrl键并从情节提要界面中视图控制器下方的视图控制器图标拖动到要分段的视图控制器。然后,它将允许您设置多个分段

然后,为了使分段真正起作用,您需要向分段本身添加标识符,您可以通过单击它们,然后在属性检查器中为其命名:

然后,以TableCells为例,在UITableViewDelegate中

-tableView:didSelectRowAtIndexPath: 
你可以用

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

根据您自己选择的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];
}
类型
是视图控制器的一个属性,它决定了应该执行哪个序列


如上所述,关键是通过链接两个视图控制器来创建segue。

在swift 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)

}

我尝试了这个方法,但仍然没有成功,只有一个视图被调用。这必须起作用。我总是这样做。现在删除你必须添加到该VC的segue并重新添加,确保每个segue都连接到VC本身。然后您可以调用[self-PerformsgueWithIdentifier:@“segueID”发送方:nil];在didSelectRowAtIndexPath上。太好了!我不知道你可以从视图控制器中获得segue,我认为它们只能像按钮或类似按钮一样使用。:)我现在更喜欢segues了。你能把这个答案充实一点吗?这只不过是一个评论,你是什么意思?“除了我是如何做到的,我认为没有其他方法可以解释它了。”卡斯佩林-你为什么要关闭这个?如果你不理解这个问题,忽略它。这是一个非常常见的问题,人们试图使用故事板。请取消关闭。完全同意。这肯定是偶然关闭的吧?请打开。同上。这可能是错误地关闭的。这是最好的答案,因为带有故事板的界面生成器不是超级直观的。知道从何处控制单击是关键:)感谢您准确描述如何在IB中执行此操作!