Frage

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?

War es hilfreich?

Lösung

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.

Andere Tipps

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.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top