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

时间:2012-02-10 11:20:30

标签: ios uitableview uiviewcontroller storyboard segue

我正在尝试制作一个机制来深入查看文件/文件夹列表。这个想法是每次用户选择文件夹时显示相同的文件列表视图控制器,并在他/她选择文件时显示文件详细信息视图控制器。

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

enter image description here

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

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

9 个答案:

答案 0 :(得分:43)

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

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

如果您不希望NavigationController继续将其自身添加到“后退”历史记录中,则可以在添加之前弹出堆栈。

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

答案 1 :(得分:29)

使用Xcode 5有一个很多更简单的解决方案。

  1. 单击情节提要中的表格单元格
  2. 打开Connections Inspector(右上角的右箭头图标)
  3. 在"触发segues"你看"选择"
  4. 从"选择"旁边的圆圈拖动到故事板中的单元格
  5. 那就是它。

答案 2 :(得分:26)

我开发了一种使用幻像按钮创建segue的方法。我相信它会解决你的问题。您可以在我的回答here中阅读相关内容。

答案 3 :(得分:23)

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

答案 4 :(得分:14)

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

答案 5 :(得分:13)

在IOS 6中,有a cleaner solution而不是使用幻像按钮。您仍然可以将表格单元格中的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);
}

答案 6 :(得分:11)

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

enter image description here

答案 7 :(得分:4)

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

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

您只需将Restoration ID设置为与Storyboard ID相同(IB中有一个复选框)。

Restoration ID

答案 8 :(得分:0)

希望这有帮助。

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

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

这样的事情:

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