【发布时间】:2015-03-10 13:35:19
【问题描述】:
当与模态视图和容器视图结合使用时,在 iOS 8.1 中展开转场的行为似乎不如预期。 这是测试项目的视图控制器层次结构,可以是found on github:
点击“点击我”按钮会推动嵌入在导航控制器中的模态视图,该视图将 tableView 作为子视图控制器。点击 tableView 中的一行会推送另一个 tableView。最后,点击最终 tableView 中的一行应该调用在前一个视图控制器上找到的名为 bUnwindSegue 的展开 segue。
问题:
- bUnwindSegue 永远不会被调用。
- 根据技术说明TN2298,容器视图控制器负责选择子视图控制器来处理segue。在这种情况下,应该在容器视图控制器上调用
viewControllerForUnwindSegueAction:fromViewController:withSender:。不是。
在示例项目中,您可以看到BTableViewController 包含展开转场:
- (IBAction)bUnwindSegue:(UIStoryboardSegue *)segue;
{
NSLog(@"Unwinding...this unwind segue will never get called.");
}
在情节提要中,CTableViewController 的单元格选择操作确实是bUnwindSegue。另请注意,如果您将CTableViewController 的单元格选择操作更改为容器视图控制器中的展开转场 -- containerVCUnwindSegue -- 则转场被正确调用。
unwind segues 的行为是否不符合预期?
【问题讨论】:
-
你的展开segue方法应该在你正在展开到的视图控制器中。
-
@LyndseyScott BTableViewController 是正在解压到的 VC。
-
@LyndseyScott 展开转场目前是通过情节提要设置的。那里也需要发生变化。或者,您可以删除情节提要展开并以编程方式设置它。我希望这两种情况的行为相同。
-
刚刚意识到我误读了我引用的第二句话......而且我通常把 B C 和 TableViewControllers 搞混了......不过我现在已经赶上了并重新考虑......
-
除非您将 segue 放入容器视图控制器中,否则它不会转换回来的原因是因为与 CTableViewController 不同,BTableViewController 并未作为独立视图控制器添加到堆栈中,而是作为您的容器容器视图控制器。
标签: ios uistoryboardsegue ios8.1 uicontainerview unwind-segue