Skip to content

Instantly share code, notes, and snippets.

@jdg
Created April 24, 2010 21:24
Show Gist options
  • Save jdg/377958 to your computer and use it in GitHub Desktop.
Save jdg/377958 to your computer and use it in GitHub Desktop.
//
// A category on UIViewController that lets you do this:
//
// [myViewController showInPopoverFromRect:someRect inView:someView];
//
// A global instance of the popover controller will be managed by the view controller..
//
#import <UIKit/UIKit.h>
@interface UIViewController (Popover) <UIPopoverControllerDelegate>
- (void)showInPopoverFromRect:(CGRect)rect inView:(UIView *)view;
- (void)showInPopoverFromBarButtonItem:(UIBarButtonItem *)item;
- (void)dismissPopover;
- (void)removePopover;
@end
static UIPopoverController *sharedPopoverController = nil;
@implementation UIViewController (Popover)
- (void)_setupSharedPopoverController
{
[self dismissPopover];
if (! sharedPopoverController) {
sharedPopoverController = [[UIPopoverController alloc] initWithContentViewController:self];
}
else {
sharedPopoverController.contentViewController = self;
}
sharedPopoverController.delegate = self;
}
- (void)showInPopoverFromRect:(CGRect)rect inView:(UIView *)view //permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
{
[self _setupSharedPopoverController];
[sharedPopoverController presentPopoverFromRect:rect inView:view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
- (void)showInPopoverFromBarButtonItem:(UIBarButtonItem *)item
{
[self _setupSharedPopoverController];
[sharedPopoverController presentPopoverFromBarButtonItem:item permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
- (void)dismissPopover
{
if (sharedPopoverController && sharedPopoverController.isPopoverVisible) {
[sharedPopoverController dismissPopoverAnimated:YES];
[sharedPopoverController release];
sharedPopoverController = nil;
}
}
- (void)removePopover
{
if (sharedPopoverController.isPopoverVisible) {
[sharedPopoverController dismissPopoverAnimated:NO];
[sharedPopoverController release];
sharedPopoverController = nil;
}
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
[sharedPopoverController release];
sharedPopoverController = nil;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment