从UIPopoverController中解开Segue

时间:2015-02-09 14:47:55

标签: ios segue uipopovercontroller unwind-segue responder-chain

我已UIViewController通过发送UIStoryboardinitialViewController加载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的视图控制器开始,搜索顺序如下:

     
      
  1. 响应者链中的下一个视图控制器发送presentViewController:animated:completion:消息。对于以模态方式呈现的视图控制器,这将是调用parentViewController的视图控制器。否则,childViewControllers。   默认实现在接收者的canPerformUnwindSegueAction:fromViewController:withSender:数组中搜索想要处理展开动作的视图控制器。如果接收器的子视图控制器都不想处理展开动作,则接收器检查它是否想要处理展开动作并且如果它那么返回自身。在这两种情况下,viewControllerForUnwindSegueAction:fromViewController:withSender:方法用于确定给定的视图控制器是否要处理展开操作。

  2.   
  3. 如果在步骤1中UIPopoverController没有返回视图控制器,则从响应者链中的下一个视图控制器重复搜索。< / p>

  4.   

(请注意我对第二点的强调。)

所以,据我所见,我正在做的事情,不知何故,只是工作。展开segue会将响应者链冒出来,从呈现的视图控制器中,向{{1}}冒出任何呈现的内容,并在链上 - 最终找到我的展开处理程序。

虽然它不起作用。任何想法为什么不呢?

0 个答案:

没有答案