diff --git a/Demo/TSPopoverDemo/MainViewController.h b/Demo/TSPopoverDemo/MainViewController.h index 531475b..008c30a 100644 --- a/Demo/TSPopoverDemo/MainViewController.h +++ b/Demo/TSPopoverDemo/MainViewController.h @@ -7,7 +7,8 @@ // #import +#import "TSPopoverController.h" -@interface MainViewController : UIViewController +@interface MainViewController : UIViewController @end diff --git a/Demo/TSPopoverDemo/MainViewController.m b/Demo/TSPopoverDemo/MainViewController.m index 0517456..6b256b7 100644 --- a/Demo/TSPopoverDemo/MainViewController.m +++ b/Demo/TSPopoverDemo/MainViewController.m @@ -115,6 +115,7 @@ -(void)showPopover:(id)sender forEvent:(UIEvent*)event popoverController.titleText = @"change order"; popoverController.popoverBaseColor = [UIColor lightGrayColor]; popoverController.popoverGradient= NO; + popoverController.delegate=self; // popoverController.arrowPosition = TSPopoverArrowPositionHorizontal; [popoverController showPopoverWithTouch:event]; @@ -136,4 +137,11 @@ -(void) showActionSheet:(id)sender forEvent:(UIEvent*)event [actionSheet showWithTouch:event]; } +- (void)popoverControllerDidDismissPopover:(TSPopoverController *)popoverController{ + NSLog(@"Delegate: Popover did dismiss"); +} +- (BOOL)popoverControllerShouldDismissPopover:(TSPopoverController *)popoverController{ + NSLog(@"Delegate: Popover should dismiss?"); + return YES; +} @end diff --git a/TSPopover/TSActionSheet.m b/TSPopover/TSActionSheet.m index 99c6a46..0dcba94 100644 --- a/TSPopover/TSActionSheet.m +++ b/TSPopover/TSActionSheet.m @@ -184,12 +184,12 @@ - (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)anim if (animated) { - [popoverController dismissPopoverAnimatd:YES]; + [popoverController dismissPopoverAnimated:YES]; [self removeFromSuperview]; } else { - [popoverController dismissPopoverAnimatd:NO]; + [popoverController dismissPopoverAnimated:NO]; [self removeFromSuperview]; } } diff --git a/TSPopover/TSPopoverController.h b/TSPopover/TSPopoverController.h index bf57bf6..ebcb202 100644 --- a/TSPopover/TSPopoverController.h +++ b/TSPopover/TSPopoverController.h @@ -24,6 +24,14 @@ enum { }; typedef NSUInteger TSPopoverArrowPosition; +@class TSPopoverController; +@protocol TSPopoverControllerDelegate + +- (void)popoverControllerDidDismissPopover:(TSPopoverController *)popoverController; +- (BOOL)popoverControllerShouldDismissPopover:(TSPopoverController *)popoverController; + +@end + @class TSPopoverPopoverView; @interface TSPopoverController : UIViewController @@ -32,6 +40,7 @@ typedef NSUInteger TSPopoverArrowPosition; TSPopoverArrowDirection arrowDirection; CGRect screenRect; int titleLabelheight; + id delegate; } @property (strong, nonatomic) UIViewController *contentViewController; @@ -43,6 +52,7 @@ typedef NSUInteger TSPopoverArrowPosition; @property (nonatomic) int cornerRadius; @property (nonatomic, readwrite) TSPopoverArrowPosition arrowPosition; @property (nonatomic) BOOL popoverGradient; +@property (nonatomic) id delegate; - (id)initWithContentViewController:(UIViewController*)viewController; - (id)initWithView:(UIView*)view; @@ -50,6 +60,6 @@ typedef NSUInteger TSPopoverArrowPosition; - (void) showPopoverWithCell:(UITableViewCell*)senderCell; - (void) showPopoverWithRect:(CGRect)senderRect; - (void) view:(UIView*)view touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event; -- (void) dismissPopoverAnimatd:(BOOL)animated; +- (void) dismissPopoverAnimated:(BOOL)animated; @end diff --git a/TSPopover/TSPopoverController.m b/TSPopover/TSPopoverController.m index 2e2674f..31ebd40 100644 --- a/TSPopover/TSPopoverController.m +++ b/TSPopover/TSPopoverController.m @@ -35,6 +35,7 @@ @implementation TSPopoverController @synthesize arrowPosition = _arrowPosition; @synthesize popoverBaseColor = _popoverBaseColor; @synthesize popoverGradient = _popoverGradient; +@synthesize delegate; - (id)init { if ((self = [super init])) { @@ -184,14 +185,21 @@ - (void) showPopoverWithPoint:(CGPoint)senderPoint layer.shadowOpacity = 0.5; [self.view addSubview:popoverView]; + + self.view.layer.shadowOffset = CGSizeMake(0, 1); + self.view.layer.shadowColor = [[UIColor colorWithRed:0.37 green:0.37 blue:0.37 alpha:1.0] CGColor]; + self.view.layer.shadowRadius = 0.5; + self.view.layer.shadowOpacity = 0.8; UIWindow *appWindow = [[UIApplication sharedApplication] keyWindow]; - //[appWindow addSubview:self.view]; - - [appWindow.rootViewController.view addSubview:self.view]; + if ([appWindow.rootViewController.view isFirstResponder]) { + [appWindow.rootViewController.view addSubview:self.view]; + } else { + [appWindow addSubview:self.view]; + } - [UIView animateWithDuration:0.0 + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^{ @@ -205,13 +213,14 @@ - (void) showPopoverWithPoint:(CGPoint)senderPoint - (void)view:(UIView*)view touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { - [self dismissPopoverAnimatd:YES]; + [self dismissPopoverAnimated:YES]; } -- (void) dismissPopoverAnimatd:(BOOL)animated +- (void) dismissPopoverAnimated:(BOOL)animated { - if (self.view) { + + if (self.view && (!delegate || [delegate popoverControllerShouldDismissPopover:self]) ) { if(animated) { [UIView animateWithDuration:0.2 delay:0.0 @@ -227,6 +236,7 @@ - (void) dismissPopoverAnimatd:(BOOL)animated self.titleText = nil; self.titleColor = nil; self.titleFont = nil; + [delegate popoverControllerDidDismissPopover:self]; } ]; }else{ @@ -237,6 +247,7 @@ - (void) dismissPopoverAnimatd:(BOOL)animated self.titleText = nil; self.titleColor = nil; self.titleFont = nil; + [delegate popoverControllerDidDismissPopover:self]; } } diff --git a/TSPopover/TSPopoverPopoverView.m b/TSPopover/TSPopoverPopoverView.m index 3a6f5a8..8382eed 100644 --- a/TSPopover/TSPopoverPopoverView.m +++ b/TSPopover/TSPopoverPopoverView.m @@ -140,8 +140,8 @@ -(UIImage*)backgroundImage //// Polygon Drawing UIBezierPath* bezierPath = [UIBezierPath bezierPath]; if(self.arrowPosition == TSPopoverArrowPositionVertical){ - arrowFirst = senderLocationInViewPoint.x-ARROW_SIZE/2; - arrowLast = senderLocationInViewPoint.x+ARROW_SIZE/2; + arrowFirst = senderLocationInViewPoint.x-ARROW_SIZE/1.5; + arrowLast = senderLocationInViewPoint.x+ARROW_SIZE/1.5; if(arrowFirst < bgRectPositionX + (self.cornerRadius+MARGIN)){ arrowFirst = bgRectPositionX + (self.cornerRadius+MARGIN); arrowLast = arrowFirst + ARROW_SIZE;