【问题标题】:UIPopoverController delegate not getting called on dismissUIPopoverController 委托未在解雇时被调用
【发布时间】: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 让我们现在关于解雇的方式。

标签: ios objective-c delegates uipopovercontroller


【解决方案1】:

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

Apple DocumentationpopoverControllerDidDismissPopover: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 2010-12-29
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多