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