frankish
frankish

Reputation: 6826

UIPopoverController delegate not getting called on dismiss

I assign popover object o it's contentViewController and I put dismiss code in a button which resides in the content view controller.

When the button is pressed:

 [self.popover dismissPopoverAnimated:YES];

is called and popover is dismissed. However, delegate's method is not called automatically. I thought that I was not setting it's delegate, but it is there. If I add the following line after dismissPopoverAnimated line, delegate is called correctly...

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

I don't understand why it doesn't "automatically" call the delegate's method. How can this happen?

Upvotes: 13

Views: 5688

Answers (3)

Edwin O.
Edwin O.

Reputation: 5276

popoverControllerDidDismissPopover is not called on Dismiss, but its called when you click outside the popoverController contentview.

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

Upvotes: 1

auspicious99
auspicious99

Reputation: 4311

There are two ways to dismiss a popover. (a) tapping outside the popover; and (b) doing it programmatically with

[self.popover dismissPopoverAnimated:YES];

If you do it programmatically, then the docs (https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverControllerDidDismissPopover:) say:

The popover controller does not call this method in response to programmatic calls to the dismissPopoverAnimated: method. If you dismiss the popover programmatically, you should perform any cleanup actions immediately after calling the dismissPopoverAnimated: method.

Thus, not calling the delegate automatically is the normal behavior, and what you're doing (calling it yourself) is fine.

Upvotes: 4

RKHessel
RKHessel

Reputation: 176

The popoverControllerDidDismissPopover: in the delegate is not called when 'dismissPopoverAnimated:' is used.

From the Apple Documentation for popoverControllerDidDismissPopover: in UIPopoverControllerDelegate:

The popover controller does not call this method in response to programmatic calls to the dismissPopoverAnimated: method. If you dismiss the popover programmatically, you should perform any cleanup actions immediately after calling the dismissPopoverAnimated: method.

Upvotes: 16

Related Questions