我正在尝试制作一个机制来深入查看文件/文件夹列表。这个想法是每次用户选择文件夹时显示相同的文件列表视图控制器,并在他/她选择文件时显示文件详细信息视图控制器。
到目前为止,我已经从文件列表视图控制器创建了一个segue到文件详细信息视图控制器,并从文件列表表视图单元格到文件列表表视图控制器中创建了一个segue:
这个问题是,一旦用户点击单元格,就会执行segue。我想从表视图单元格中删除segue,并从文件列表视图控制器中创建一个到自身。这样,当用户点击单元格时,我可以以编程方式触发右侧segue。
所以,我的问题是:是否可以在Interface Builder中从视图控制器创建一个segue?
答案 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有一个很多更简单的解决方案。
那就是它。
答案 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)
答案 7 :(得分:4)
以下是如何在不定义segue或硬编码自己的标识符的情况下推送当前视图控制器的另一个实例:
SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier];
[self.navigationController pushViewController: same animated: YES];
您只需将Restoration ID设置为与Storyboard ID相同(IB中有一个复选框)。
答案 8 :(得分:0)
希望这有帮助。
我发现你可以创建多个原型单元格。
您可以将每个单元格(在故事板中)链接到不同的视图。
这样的事情:
NSString *CellIdentifier = @"Cell";
if (Condition2 ){
CellIdentifier = @"Cell2"; }
if (Condition3 ){
CellIdentifier = @"Cell3"; }