故事板从视图控制器到本身

我正在试图做一个机制来深入文件/文件夹列表。 这个想法是每次用户select文件夹时显示相同的文件列表视图控制器,并显示文件详细视图控制器,如果他/她select一个文件。

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

在这里输入图像说明

这个问题是,只要用户点击单元格,segue就会被执行。 我想从表格视图单元格中删除segue,并从文件列表视图控制器自己。 这样,当用户敲击单元格时,我可以以编程方式触发正确的继续。

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

我开发了一个方法来创build一个幻像button使用。 我相信这会解决你的问题。 你可以在我的答案这里阅读 。

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

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; [self.navigationController pushViewController:dest animated:YES]; 

如果您不希望NavigationController继续将自己添加到您的“后退”历史logging中,您可以在添加之前popup堆栈。

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

使用Xcode 5有一个简单的解决scheme。

  1. 点击故事板中的表格单元格
  2. 打开Connections Inspector(右上angular的右箭头图标)
  3. 在“触发的赛段”下,您可以看到“select”
  4. 从“selection”旁边的圆圈拖到故事板中的单元格

而已。

而不是执行一个segue到同一个控制器,你可以实例化一个视图控制器(同一个)从故事板,然后推到导航控制器。

在IOS 6中,有比使用幻像button更清洁的解决scheme 。 您仍然可以从表格单元格中定义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); } 

以下是如何推送当前视图控制器的另一个实例,而无需定义segue或硬编码自己的标识符:

 SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier]; [self.navigationController pushViewController: same animated: YES]; 

您只需要将恢复ID设置为与Storyboard ID相同(IB中有一个checkbox)。

恢复ID

界面生成器的方法:只是延续到一个故事板参考,这是参考呈现视图控制器。

希望这可以帮助。

我发现你可以创build多个原型单元格。

比你可以链接每个单元格(在故事板)到不同的视图。

像这样的东西:

 NSString *CellIdentifier = @"Cell"; if (Condition2 ){ CellIdentifier = @"Cell2"; } if (Condition3 ){ CellIdentifier = @"Cell3"; }