UIPopoverController委托没有被调用

时间:2014-01-12 14:38:55

标签: ios objective-c delegates uipopovercontroller

我指定了popover对象o它的contentViewController,我把dismiss代码放在一个位于内容视图控制器中的按钮中。

按下按钮时:

 [self.popover dismissPopoverAnimated:YES];

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

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

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

3 个答案:

答案 0 :(得分:16)

当使用'dismissPopoverAnimated:'时,不会调用委托中的popoverControllerDidDismissPopover:

来自popoverControllerDidDismissPopover:UIPopoverControllerDelegate的{​​{3}}:

  

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

答案 1 :(得分:4)

有两种方法可以解雇弹出窗口。 (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 :)会说:

  

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

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

答案 2 :(得分:0)

popdiControllerDidDismissPopover不会在Dismiss上调用,但是当你在popoverController内容视图外面点击它时会调用它。

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