From 7f4f5f86e0689700d3e51848526defff0b745e1b Mon Sep 17 00:00:00 2001 From: Carlos Oliva Date: Tue, 25 Sep 2012 16:56:00 -0300 Subject: [PATCH] Made the methods in optional Checks for delegate conformance and if the methods are actually implemented before calling them --- Classes/Popover/WEPopoverController.h | 2 ++ Classes/Popover/WEPopoverController.m | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Classes/Popover/WEPopoverController.h b/Classes/Popover/WEPopoverController.h index 6261a87..fab2f7e 100755 --- a/Classes/Popover/WEPopoverController.h +++ b/Classes/Popover/WEPopoverController.h @@ -15,6 +15,8 @@ @protocol WEPopoverControllerDelegate +@optional + - (void)popoverControllerDidDismissPopover:(WEPopoverController *)popoverController; - (BOOL)popoverControllerShouldDismissPopover:(WEPopoverController *)popoverController; diff --git a/Classes/Popover/WEPopoverController.m b/Classes/Popover/WEPopoverController.m index dabcc1a..8c13960 100755 --- a/Classes/Popover/WEPopoverController.m +++ b/Classes/Popover/WEPopoverController.m @@ -106,7 +106,10 @@ - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished c if (userInitiatedDismissal) { //Only send message to delegate in case the user initiated this event, which is if he touched outside the view - [delegate popoverControllerDidDismissPopover:self]; + if(delegate != nil && [delegate conformsToProtocol:@protocol(WEPopoverControllerDelegate)] && + [delegate respondsToSelector:@selector(popoverControllerDidDismissPopover:)]) { + [delegate popoverControllerDidDismissPopover:self]; + } } } } @@ -246,9 +249,13 @@ - (void)repositionPopoverFromRect:(CGRect)rect - (void)viewWasTouched:(WETouchableView *)view { if (popoverVisible) { - if (!delegate || [delegate popoverControllerShouldDismissPopover:self]) { - [self dismissPopoverAnimated:YES userInitiated:YES]; + BOOL shouldDismiss = YES; + if(delegate != nil && [delegate conformsToProtocol:@protocol(WEPopoverControllerDelegate)] && + [delegate respondsToSelector:@selector(popoverControllerShouldDismissPopover:)]) { + shouldDismiss = [delegate popoverControllerShouldDismissPopover:self]; } + if(shouldDismiss) + [self dismissPopoverAnimated:YES userInitiated:YES]; } }