Reputation: 6826
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
Reputation: 5276
popoverControllerDidDismissPopover is not called on Dismiss, but its called when you click outside the popoverController contentview.
Upvotes: 1
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
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