我已经通过发送它UIViewController
从 a 加载了它(它不是我的应用程序的主要故事板)。UIStoryboard
initialViewController
我在那个故事板中使用了一个放松的转场。它的退出点是在主要UIViewController
场景中的一个放松动作中。 UIStoryboard
我用代码而不是 segue 显示这个视图控制器。
如果我用 显示加载的视图控制器presentViewController:animated:completion:
,则展开 segue 可以正常工作并找到合适的处理程序。
但是,如果我将呈现的视图控制器包装在 a中,然后呈现弹出框,则展开 segue 不起作用。UIPopoverController
我可以断点展开动作并且它不会被调用。
在他们关于 unwind segues 如何工作的技术说明中,Apple 介绍了查找目标视图控制器的过程。
Unwind Segue 如何确定其目标视图控制器 当启动 unwind segue 时,它必须首先在导航层次结构中找到最近的视图控制器,该控制器实现在创建 unwind segue 时指定的展开操作。这个视图控制器成为展开转场的目的地。如果没有找到合适的视图控制器,则 unwind segue 被中止。
从启动 unwind segue 的视图控制器开始,搜索顺序如下:
响应者链中的下一个视图控制器被发送
viewControllerForUnwindSegueAction:fromViewController:withSender:
消息。对于模态呈现的视图控制器,这将是调用presentViewController:animated:completion:
. 否则,parentViewController
. 默认实现在接收者的childViewControllers
数组中搜索想要处理展开动作的视图控制器。如果接收者的子视图控制器都不想处理展开动作,则接收者检查它是否想要处理展开动作,如果是,则返回 self。在这两种情况下,该canPerformUnwindSegueAction:fromViewController:withSender:
方法都用于确定给定的视图控制器是否想要处理展开操作。
viewControllerForUnwindSegueAction:fromViewController:withSender:
如果在第一步中没有返回视图控制器,则从响应者链中的下一个视图控制器开始重复搜索。
(注意我对第二点的强调。)
所以,据我所知,我正在做的事情应该以某种方式工作。unwind segue 将在响应者链中冒泡,从呈现的视图控制器中UIPopoverController
出来,进入到出现的任何内容中,并在链上向上 - 最终找到我的 unwind 处理程序。
但它不起作用。有什么想法为什么不呢?