直接在不同的细节视图控制器之间进行segue

Posted

技术标签:

【中文标题】直接在不同的细节视图控制器之间进行segue【英文标题】:directly segueing between different detail view controllers 【发布时间】:2013-07-21 22:52:16 【问题描述】:

我有一个 iPhone 主从故事板应用程序,它使用两个不同的细节视图控制器(一个创建 VC 和一个编辑 VC)。从主视图中,如果我点击“+”新按钮,我会以编程方式选择创建 VC,而如果我选择 tableViewCell,则程序会选择编辑 VC。所有这一切都很好。现在我希望能够直接从创建 VC 到编辑 VC。问题是我最终得到了例外“只有在源控制器由 UINavigationController 的实例管理时才能使用推送转场。”

我的故事板看起来像这样。

我也尝试将我的细节 VC 嵌入到导航 VC 中,但没有成功。

另外,请记住,我正在尝试从一堆 master->createDetail 直接到 master->editDetail 不是 master->createDetail->editDetail. 我真的只想弹出 createDetail 并用 editDetail 替换它。

【问题讨论】:

【参考方案1】:
Suppose there are 2 parameters to send on next view as CustomerName and Email then code will be : 

-(IBAction)btnNextViewClicked:(id)sender 
 
UIStoryboard * myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];

NextViewController * nextView = [myStoryboard instantiateViewControllerWithIdentifier:@"nextViewCNTR"];
nextView.validEmail = @"abc@gmail.com";
nextView.customerName = @"ABC";

[self.navigationController nextView animated:YES]; 

如果你没有参数那么:

-(IBAction)btnNextViewClicked:(id)sender 
 
UIStoryboard * myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];

NextViewController * nextView = [myStoryboard instantiateViewControllerWithIdentifier:@"nextViewCNTR"];

[self.navigationController nextView animated:YES]; 

nextViewCNTR 是在 XCode 中设计时放置在流线上的标识符的名称。

使用并让我知道反馈。

【讨论】:

当你说 [self.navigationController nextView animated:YES];你的意思是[self.navigationController popToViewController:nextVC animated:YES];?我遵循了您的代码并在 IB 身份检查器中更改了设置 viewContoller 的 Storyboard ID 以匹配 instantiateViewControllerWithIdentifier 方法,但我收到此错误 * Terminating app due to uncaught exception 'NSInternalInconsistencyException',原因:'试图弹出一个不存在的视图控制器。' @honkskillet :不要使用 [self.navigationController popToViewController:nextVC animated:YES];在视图之间切换时仅使用此选项 [self.navigationController nextView animated:YES];【参考方案2】:

在细节视图中使用 UIContainerView

【讨论】:

这样做有什么作用? 如果您将容器视图放在详细视图中,您可以将 segue 添加到容器中的视图中并拥有您想要的东西

以上是关于直接在不同的细节视图控制器之间进行segue的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间进行 segue 时出现致命错误

两个不同的按钮对同一个视图控制器执行 segue,但希望通过一个按钮禁用用户交互以进行 segue

创建一个 segue 并通过 Swift 在两个视图控制器之间附加它?

UIScrollView 在从不同的视图控制器 segu 时具有不同的 y 位置

在故事板xcode中直接从视图控制器警告启动的Segues

通过 segue 在视图控制器之间传递数据