Created
April 24, 2010 21:24
-
-
Save jdg/377958 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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