Question

A very peculiar bug:

I have BarButtonItem which pops out a UIPopoverController like that:

-(void) addNewProjectButtonClicked:(id)sender
{
    //Some Preparations....

    [popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

As expected, a Popover Controller appears in the right place.

Now, I'm expecting that when i'm touching ANYWHERE outside the popover it will dismissed.
Well, the only problem is that when I hit the BarButton again (the one that poped the popover) instead of dismissing the old one and presenting a new as i would expect, the result is ANOTHER Popover on top of the existing. that means when i press again and again I get a pile of popovers that can be dismissed only with multiple clicks on somewhere else.

I know i can use some can of Singleton Design Pattern here to solve this, but isn't there an easier and built-in way to take care of it?

Thanks!

Was it helpful?

Solution

I ran into the same problem a few months ago, thought it would dismiss itself when I tapped anything but it's not the case.

The way I'm dealing with this is to keep a reference to the old popover, and dismiss it when the UIBarButtonItem is tapped.

-(void) addNewProjectButtonClicked:(id)sender
{
    [popover dismissPopoverAnimated:YES];
    // Set it up again.
    [popover ...];
}

You could use a property for easy memory management, or handle it yourself.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top