UIPopoverController 委托未在解雇时被调用

Posted

技术标签:

【中文标题】UIPopoverController 委托未在解雇时被调用【英文标题】:UIPopoverController delegate not getting called on dismiss 【发布时间】:2014-01-12 14:38:55 【问题描述】:

我将弹出框对象分配给它的 contentViewController,然后我将关闭代码放在位于内容视图控制器中的按钮中。

按下按钮时:

 [self.popover dismissPopoverAnimated:YES];

被调用并且 popover 被解除。 但是,委托的方法不会自动调用。我以为我没有设置它的代表,但它就在那里。如果我在dismissPopoverAnimated 行之后添加以下行,则正确调用了委托...

 [self.popover.delegate popoverControllerDidDismissPopover:self.popover];

我不明白为什么它不“自动”调用委托的方法。 怎么会这样?

【问题讨论】:

我假设你在谈论协议的代表?这就是它的工作原理。当您希望为您的委托执行协议中定义的方法时,您需要使用 [delegate protocolMethod] 显式告诉您的委托执行此操作;在您希望方法执行的位置。想象一下,如果您的协议中有 10 种方法。在那种情况下,您不希望您的委托执行所有 10 种方法,对吧?所以它不能只猜测你想调用哪个方法,即使只定义了一个方法。 通常情况下,使用dismissPopoverAnimated 方法会在popover 关闭后自动调用popoverControllerDidDismissPopover 方法。这就是 UIPopoverController 让我们现在关于解雇的方式。 Dismissing UIPopoverController with -dismissPopoverAnimated: won't call delegate?的可能重复 【参考方案1】:

使用“dismissPopoverAnimated:”时,不会调用委托中的popoverControllerDidDismissPopover:

从Apple Documentation 到popoverControllerDidDismissPopover:UIPopoverControllerDelegate

popover 控制器不会调用此方法来响应对dismissPopoverAnimated: 方法的编程调用。如果您以编程方式关闭弹出框,则应在调用 dismissPopoverAnimated: 方法后立即执行任何清理操作。

【讨论】:

【参考方案2】:

有两种方法可以关闭弹出框。 (a) 在弹出框外点击; (b) 使用

以编程方式进行
[self.popover dismissPopoverAnimated:YES];

如果您以编程方式执行此操作,那么文档 (https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverControllerDidDismissPopover:) 会说:

popover 控制器不会调用这个方法来响应 对dismissPopoverAnimated: 方法的编程调用。如果你 以编程方式关闭弹出框,您应该执行任何清理 调用dismissPopoverAnimated: 方法后立即执行的操作。

因此,不自动调用委托是正常行为,您正在做的事情(自己调用)很好。

【讨论】:

【参考方案3】:

popoverControllerDidDismissPopover 不会在 Dismiss 时调用,而是在您单击 popoverController 内容视图外部时调用。

https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#jumpTo_4

【讨论】:

以上是关于UIPopoverController 委托未在解雇时被调用的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController 委托委托方法未被调用

无法实现 UIPopoverController 委托

用 -dismissPopoverAnimated 解散 UIPopoverController:不会调用委托?

iOS UIPopoverController委托不工作,仍然是零

未在委托上调用 CAAnimation 委托方法

如何观察 UIPopoverController 何时被解雇?