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?

有帮助吗?

解决方案

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.

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top