3

我已经通过发送它UIViewController从 a 加载了它(它不是我的应用程序的主要故事板)。UIStoryboardinitialViewController

我在那个故事板中使用了一个放松的转场。它的退出点是在主要UIViewController场景中的一个放松动作中。 UIStoryboard

我用代码而不是 segue 显示这个视图控制器。

如果我用 显示加载的视图控制器presentViewController:animated:completion:,则展开 segue 可以正常工作并找到合适的处理程序。

但是,如果我将呈现的视图控制器包装在 a中,然后呈现弹出框,则展开 segue 不起作用。UIPopoverController我可以断点展开动作并且它不会被调用。

在他们关于 unwind segues 如何工作的技术说明中,Apple 介绍了查找目标视图控制器的过程。

Unwind Segue 如何确定其目标视图控制器 当启动 unwind segue 时,它​​必须首先在导航层次结构中找到最近的视图控制器,该控制器实现在创建 unwind segue 时指定的展开操作。这个视图控制器成为展开转场的目的地。如果没有找到合适的视图控制器,则 unwind segue 被中止。

从启动 unwind segue 的视图控制器开始,搜索顺序如下:

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

  2. viewControllerForUnwindSegueAction:fromViewController:withSender:如果在第一步中没有返回视图控制器,则从响应者链中的下一个视图控制器开始重复搜索

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

所以,据我所知,我正在做的事情应该以某种方式工作。unwind segue 将在响应者链中冒泡,从呈现的视图控制器中UIPopoverController出来,进入到出现的任何内容中,并在链上向上 - 最终找到我的 unwind 处理程序。

但它不起作用。有什么想法为什么不呢?

4

0 回答 0