Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dismissing UIPopoverController with -dismissPopoverAnimated: won't call delegate?

I have my UIPopoverController with self as a delegate: I receive calls when I tap outside the popover controller, but when I tap inside I want to dismiss too, so I use -dismissPopoverAnimated: but delegate is not called in this case. Is this normal? Is this a bug or I am doing something wrong?

newDocPopoverController = [[UIPopoverController alloc] initWithContentViewController:vc];
[newDocPopoverController setPopoverContentSize:CGSizeMake(240, 44*4)];
[newDocPopoverController presentPopoverFromBarButtonItem:sender 
                permittedArrowDirections:UIPopoverArrowDirectionAny
                                                        animated:YES];
[newDocPopoverController setDelegate:self];

UPDATE:

Oh, regardless the origin of the problem (Whether is a bug or this is the intended behavior) calling the delegate by myself solves the problem :)

When the contentViewController's view is touched I will call parent UIPopoverController's delegate a call.

if ([parentPopoverController.delegate popoverControllerShouldDismissPopover:parentPopoverController]){
    [parentPopoverController dismissPopoverAnimated:YES];
    [parentPopoverController.delegate popoverControllerDidDismissPopover:parentPopoverController];
}r];
like image 930
nacho4d Avatar asked Aug 25 '10 14:08

nacho4d


2 Answers

That's normal, expected behavior.

Quoting the Apple docs on popoverControllerDidDismissPopover::

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.

like image 81
Douwe Maan Avatar answered Oct 13 '22 10:10

Douwe Maan


Programmatically the popoverControllerDidDismissPopover does not get called and won't dismissed, you'll have to call the delegate yourself:

[self.PopUp dismissPopoverAnimated:YES];
[self.PopUp.delegate popoverControllerDidDismissPopover:self.PopUp];

Where PopUp is the parent UIPopoverController

Hope this helps

Cheers Al

like image 30
Al Pascual Avatar answered Oct 13 '22 08:10

Al Pascual