从视图控制器到自身的故事板

Jor*_*rge 74 storyboard uitableview uiviewcontroller ios segue

我正在尝试建立一个机制来深入查看文件/文件夹列表.想法是每次用户选择文件夹时显示相同的文件列表视图控制器,并且如果他/她选择文件则显示文件详细视图控制器.

到目前为止,我已经从文件列表视图控制器创建了一个segue到文件详细信息视图控制器,并从文件列表表视图单元格到文件列表表视图控制器创建了一个segue:

在此输入图像描述

这个问题是,一旦用户点击单元格,就会执行segue.我想从表视图单元格中删除segue,并从文件列表视图控制器中创建一个到自身.这样,当用户点击单元格时,我可以以编程方式触发右侧segue.

所以,我的问题是:是否可以在Interface Builder中从视图控制器创建一个segue?

Jim*_*rue 43

如果您使用的是导航控制器,则需要将ViewController推入导航堆栈.在这个例子中,我在Storyboard ID设置中命名了我的ViewController"VDI".

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
[self.navigationController pushViewController:dest animated:YES];
Run Code Online (Sandbox Code Playgroud)

如果您不希望NavigationController继续将其自身添加到"Back"历史记录中,则可以在添加之前弹出堆栈,就像这样.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:dest animated:YES];
Run Code Online (Sandbox Code Playgroud)


Joh*_*kel 30

使用Xcode 5有一个简单的解决方案.

  1. 单击故事板中的表格单元格
  2. 打开Connections Inspector(右上角的右箭头图标)
  3. 在"触发的segues"下你会看到"选择"
  4. 从"选择"旁边的圆圈拖动到故事板中的单元格

而已.

  • 这种方法就像一个没有代码行的魅力. (2认同)
  • 这是*xcode 5+的正确答案,这些天您应该使用"show"segue. (2认同)
  • 似乎对我不起作用,视图控制器不会变成"蓝色"以允许添加segue. (2认同)

T.J*_*.J. 26

我开发了一种使用幻像按钮创建segue的方法.我相信它会解决你的问题.你可以在我的答案读到它在这里.

  • 这让我走上正轨.我在"Dock"上添加了一个按钮,并将其连接到文件列表视图控制器.现在我可以按照自己的意愿以编程方式执行segue.谢谢! (4认同)
  • 穆斯塔法的解决方案不那么简单,而且很简单.使用幻像按钮将segues设置为相同的视图只会使您的故事板变得一团糟. (2认同)

Mus*_*afa 24

您可以从故事板中实例化视图控制器(同一个),然后将其推送到导航控制器,而不是对同一个控制器执行segue.


Jos*_*ner 16

Interface Builder方法:只需转到故事板参考,该参考引用回显示视图控制器.

  • 如果用IB中的segue完成其他导航,这种方法是最好的!谢谢! (2认同)
  • 额外的细节:您需要给您的控制器一个“ Storyboard ID”,然后在参考的“ Referenced ID **”字段中使用该ID。 (2认同)

Chr*_*ris 13

在IOS 6中,有一个比使用幻像按钮更清晰的解决方案.您仍然可以定义从表格单元格到视图控制器的segue,并查看发送方以取消自动触发的segue:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //storyboards should use segues and override prepareForSegue instead
    //but here we need custom logic to determine which segue to use
    id item = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if (item meets condition) {
        [self performSegueWithIdentifier:@"segue1" sender:self];
    } else {
        [self performSegueWithIdentifier:@"segue2" sender:self];
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath
    return (sender == self);
}
Run Code Online (Sandbox Code Playgroud)


Set*_*hmr 13

正确的答案是使用一个Storyboard引用,它引用你想要自己的UIViewController,然后将segue指向它.

在此输入图像描述