Skip to content

Instantly share code, notes, and snippets.

@crafterm
Forked from lukeredpath/LRPopoverManager.h
Created May 24, 2010 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crafterm/412438 to your computer and use it in GitHub Desktop.
Save crafterm/412438 to your computer and use it in GitHub Desktop.
//
// LRPopoverManager.h
// Spark
//
// Created by Luke Redpath on 24/05/2010.
// Copyright 2010 LJR Software Limited. All rights reserved.
//
#import <Foundation/Foundation.h>
extern NSString *const LRUIPopoverControllerDidDismissNotification;
@interface LRPopoverManager : NSObject <UIPopoverControllerDelegate> {
UIPopoverController *currentPopoverController;
BOOL permitCurrentPopoverControllerToDismiss;
}
@property (nonatomic, retain) UIPopoverController *currentPopoverController;
@property (nonatomic, assign) BOOL permitCurrentPopoverControllerToDismiss;
+ (id)sharedManager;
- (void)presentPopoverController:(UIPopoverController *)pc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
- (void)presentPopoverController:(UIPopoverController *)pc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
- (void)presentControllerInPopoverController:(UIViewController *)vc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
- (void)presentControllerInPopoverController:(UIViewController *)vc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
- (void)dismissCurrentPopoverController:(BOOL)animated;
@end
//
// LRPopoverManager.m
// Spark
//
// Created by Luke Redpath on 24/05/2010.
// Copyright 2010 LJR Software Limited. All rights reserved.
//
#import "LRPopoverManager.h"
NSString *const LRUIPopoverControllerDidDismissNotification = @"LRUIPopoverControllerDidDismissNotification";
@implementation LRPopoverManager
@synthesize currentPopoverController;
@synthesize permitCurrentPopoverControllerToDismiss;
static LRPopoverManager *sharedManager = nil;
+ (void)initialize {
if (self == [LRPopoverManager class]) {
sharedManager = [[self alloc] init];
sharedManager.permitCurrentPopoverControllerToDismiss = YES;
}
}
+ (id)sharedManager {
return sharedManager;
}
- (void)setCurrentPopoverController:(UIPopoverController *)pc
{
[self dismissCurrentPopoverController:YES];
if (pc != currentPopoverController) {
[currentPopoverController release];
currentPopoverController = [pc retain];
currentPopoverController.delegate = self;
}
self.permitCurrentPopoverControllerToDismiss = YES;
}
- (void)presentPopoverController:(UIPopoverController *)pc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated
{
self.currentPopoverController = pc;
[self.currentPopoverController presentPopoverFromRect:rect inView:view permittedArrowDirections:arrowDirections animated:animated];
}
- (void)presentPopoverController:(UIPopoverController *)pc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated
{
self.currentPopoverController = pc;
[self.currentPopoverController presentPopoverFromBarButtonItem:item permittedArrowDirections:arrowDirections animated:animated];
}
- (void)dismissCurrentPopoverController:(BOOL)animated;
{
[self.currentPopoverController dismissPopoverAnimated:animated];
}
- (void)presentControllerInPopoverController:(UIViewController *)vc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
{
UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:vc];
[self presentPopoverController:pc fromRect:rect inView:view permittedArrowDirections:arrowDirections animated:animated];
[pc release];
}
- (void)presentControllerInPopoverController:(UIViewController *)vc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
{
UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:vc];
[self presentPopoverController:pc fromBarButtonItem:item permittedArrowDirections:arrowDirections animated:animated];
[pc release];
}
#pragma mark -
#pragma mark UIPopoverControllerDelegate methods
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
[[NSNotificationCenter defaultCenter] postNotificationName:LRUIPopoverControllerDidDismissNotification object:popoverController];
}
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
return self.permitCurrentPopoverControllerToDismiss;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment