直接在不同的细节视图控制器之间进行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 并通过 Swift 在两个视图控制器之间附加它?