From ae5aa554a0053e246dae7a726c0beaba486745d5 Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 00:45:17 -0500 Subject: [PATCH 1/7] Added library path to import statements to avoid possible clashing. --- UIActionSheet+Blocks.m | 2 +- UIAlertView+Blocks.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UIActionSheet+Blocks.m b/UIActionSheet+Blocks.m index b852947..29e701d 100644 --- a/UIActionSheet+Blocks.m +++ b/UIActionSheet+Blocks.m @@ -6,7 +6,7 @@ // Copyright 2011 Random Ideas, LLC. All rights reserved. // -#import "UIActionSheet+Blocks.h" +#import "UIAlertView-Blocks/UIActionSheet+Blocks.h" #import static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; diff --git a/UIAlertView+Blocks.m b/UIAlertView+Blocks.m index 4594980..8d03e55 100644 --- a/UIAlertView+Blocks.m +++ b/UIAlertView+Blocks.m @@ -6,7 +6,7 @@ // Copyright 2010 Random Ideas, LLC. All rights reserved. // -#import "UIAlertView+Blocks.h" +#import "UIAlertView-Blocks/UIAlertView+Blocks.h" #import static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; From 70f1d2bdfbaff0956e3ede0399e9ec3f4b46283a Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 00:58:31 -0500 Subject: [PATCH 2/7] Renamed 'UIAlertView+Blocks' to 'UIAlertView+ButtonItemBlocks'. --- UIAlertView+Blocks.h => UIAlertView+ButtonItemBlocks.h | 2 +- UIAlertView+Blocks.m => UIAlertView+ButtonItemBlocks.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename UIAlertView+Blocks.h => UIAlertView+ButtonItemBlocks.h (91%) rename UIAlertView+Blocks.m => UIAlertView+ButtonItemBlocks.m (95%) diff --git a/UIAlertView+Blocks.h b/UIAlertView+ButtonItemBlocks.h similarity index 91% rename from UIAlertView+Blocks.h rename to UIAlertView+ButtonItemBlocks.h index 6fec7ca..497677f 100644 --- a/UIAlertView+Blocks.h +++ b/UIAlertView+ButtonItemBlocks.h @@ -9,7 +9,7 @@ #import #import "RIButtonItem.h" -@interface UIAlertView (Blocks) +@interface UIAlertView (ButtonItemBlocks) -(id)initWithTitle:(NSString *)inTitle message:(NSString *)inMessage cancelButtonItem:(RIButtonItem *)inCancelButtonItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ... NS_REQUIRES_NIL_TERMINATION; diff --git a/UIAlertView+Blocks.m b/UIAlertView+ButtonItemBlocks.m similarity index 95% rename from UIAlertView+Blocks.m rename to UIAlertView+ButtonItemBlocks.m index 8d03e55..910c1b2 100644 --- a/UIAlertView+Blocks.m +++ b/UIAlertView+ButtonItemBlocks.m @@ -6,12 +6,12 @@ // Copyright 2010 Random Ideas, LLC. All rights reserved. // -#import "UIAlertView-Blocks/UIAlertView+Blocks.h" +#import "UIAlertView-Blocks/UIAlertView+ButtonItemBlocks.h" #import static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; -@implementation UIAlertView (Blocks) +@implementation UIAlertView (ButtonItemBlocks) - (id)initWithTitle:(NSString *)inTitle message:(NSString *)inMessage cancelButtonItem:(RIButtonItem *)inCancelButtonItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ... { From 78118cd6879f711fa6a9acd6450bb6643d4c5876 Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 01:07:01 -0500 Subject: [PATCH 3/7] Updated pod spec name from 'UIAlertView-Blocks' to 'UIAlertView-ButtonItemBlocks' --- UIAlertView-Blocks.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UIAlertView-Blocks.podspec b/UIAlertView-Blocks.podspec index 423e16d..5f93f67 100644 --- a/UIAlertView-Blocks.podspec +++ b/UIAlertView-Blocks.podspec @@ -1,5 +1,5 @@ Pod::Spec.new do |s| - s.name = 'UIAlertView-Blocks' + s.name = 'UIAlertView-ButtonItemBlocks' s.version = '1.0' s.platform = :ios s.author = 'Jiva Devoe' From f9635adb5170a831202b255b13d34362d5242d4e Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 01:10:37 -0500 Subject: [PATCH 4/7] Renamed pod spec file. --- ...ertView-Blocks.podspec => UIAlertView-ButtonItemBlocks.podspec | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename UIAlertView-Blocks.podspec => UIAlertView-ButtonItemBlocks.podspec (100%) diff --git a/UIAlertView-Blocks.podspec b/UIAlertView-ButtonItemBlocks.podspec similarity index 100% rename from UIAlertView-Blocks.podspec rename to UIAlertView-ButtonItemBlocks.podspec From bd70138a54aa3f63ba3dfecd683fc18a1947bf56 Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 01:15:57 -0500 Subject: [PATCH 5/7] - Renamed action sheet category. - Updated comments. - Updated import statements. --- UIActionSheet+Blocks.h => UIActionSheet+ButtonItemBlocks.h | 4 ++-- UIActionSheet+Blocks.m => UIActionSheet+ButtonItemBlocks.m | 6 +++--- UIAlertView+ButtonItemBlocks.h | 2 +- UIAlertView+ButtonItemBlocks.m | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) rename UIActionSheet+Blocks.h => UIActionSheet+ButtonItemBlocks.h (84%) rename UIActionSheet+Blocks.m => UIActionSheet+ButtonItemBlocks.m (95%) diff --git a/UIActionSheet+Blocks.h b/UIActionSheet+ButtonItemBlocks.h similarity index 84% rename from UIActionSheet+Blocks.h rename to UIActionSheet+ButtonItemBlocks.h index 2ecba7f..a16b79d 100644 --- a/UIActionSheet+Blocks.h +++ b/UIActionSheet+ButtonItemBlocks.h @@ -1,5 +1,5 @@ // -// UIActionSheet+Blocks.h +// UIActionSheet+ButtonItemBlocks.h // Shibui // // Created by Jiva DeVoe on 1/5/11. @@ -9,7 +9,7 @@ #import #import "RIButtonItem.h" -@interface UIActionSheet (Blocks) +@interface UIActionSheet (ButtonItemBlocks) -(id)initWithTitle:(NSString *)inTitle cancelButtonItem:(RIButtonItem *)inCancelButtonItem destructiveButtonItem:(RIButtonItem *)inDestructiveItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ... NS_REQUIRES_NIL_TERMINATION; diff --git a/UIActionSheet+Blocks.m b/UIActionSheet+ButtonItemBlocks.m similarity index 95% rename from UIActionSheet+Blocks.m rename to UIActionSheet+ButtonItemBlocks.m index 29e701d..b47ba16 100644 --- a/UIActionSheet+Blocks.m +++ b/UIActionSheet+ButtonItemBlocks.m @@ -1,18 +1,18 @@ // -// UIActionSheet+Blocks.m +// UIActionSheet+ButtonItemBlocks.m // Shibui // // Created by Jiva DeVoe on 1/5/11. // Copyright 2011 Random Ideas, LLC. All rights reserved. // -#import "UIAlertView-Blocks/UIActionSheet+Blocks.h" +#import "UIAlertView-ButtonItemBlocks/UIActionSheet+ButtonItemBlocks.h" #import static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; static NSString *RI_DISMISSAL_ACTION_KEY = @"com.random-ideas.DISMISSAL_ACTION"; -@implementation UIActionSheet (Blocks) +@implementation UIActionSheet (ButtonItemBlocks) -(id)initWithTitle:(NSString *)inTitle cancelButtonItem:(RIButtonItem *)inCancelButtonItem destructiveButtonItem:(RIButtonItem *)inDestructiveItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ... { diff --git a/UIAlertView+ButtonItemBlocks.h b/UIAlertView+ButtonItemBlocks.h index 497677f..fd693e5 100644 --- a/UIAlertView+ButtonItemBlocks.h +++ b/UIAlertView+ButtonItemBlocks.h @@ -1,5 +1,5 @@ // -// UIAlertView+Blocks.h +// UIAlertView+ButtonItemBlocks.h // Shibui // // Created by Jiva DeVoe on 12/28/10. diff --git a/UIAlertView+ButtonItemBlocks.m b/UIAlertView+ButtonItemBlocks.m index 910c1b2..4d0bafb 100644 --- a/UIAlertView+ButtonItemBlocks.m +++ b/UIAlertView+ButtonItemBlocks.m @@ -1,12 +1,12 @@ // -// UIAlertView+Blocks.m +// UIAlertView+ButtonItemBlocks.m // Shibui // // Created by Jiva DeVoe on 12/28/10. // Copyright 2010 Random Ideas, LLC. All rights reserved. // -#import "UIAlertView-Blocks/UIAlertView+ButtonItemBlocks.h" +#import "UIAlertView-ButtonItemBlocks/UIAlertView+ButtonItemBlocks.h" #import static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; From 8b58ca2f9c8d70531aac4dced8aaeedaa7ca8473 Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 02:18:01 -0500 Subject: [PATCH 6/7] Added 'ButtonItemBlocks_AlertViewDelegate' class to handle alert view delegate button methods so UIAlertView no longer directly handles them. --- UIAlertView+ButtonItemBlocks.m | 181 ++++++++++++++++++++++----------- 1 file changed, 124 insertions(+), 57 deletions(-) diff --git a/UIAlertView+ButtonItemBlocks.m b/UIAlertView+ButtonItemBlocks.m index 4d0bafb..c862dc3 100644 --- a/UIAlertView+ButtonItemBlocks.m +++ b/UIAlertView+ButtonItemBlocks.m @@ -9,79 +9,146 @@ #import "UIAlertView-ButtonItemBlocks/UIAlertView+ButtonItemBlocks.h" #import + + + + static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; +static NSString *RI_AlertViewDelegate_ASS_KEY = @"com.random-ideas.AlertViewDelegate"; + + + + + +@class ButtonItemBlocks_AlertViewDelegate; +@protocol ButtonItemBlocks_AlertViewDelegate_Delegate + +-(void)buttonItemBlocks_AlertViewDelegate:(ButtonItemBlocks_AlertViewDelegate*)buttonItemBlocks_AlertViewDelegate didHandleAlertViewClickAtButtonIndex:(NSInteger)buttonIndex; + +@end + + + + + +@interface ButtonItemBlocks_AlertViewDelegate : NSObject + +@property (nonatomic, assign) id delegate; + +@end + +@implementation ButtonItemBlocks_AlertViewDelegate + +#pragma mark - UIAlertViewDelegate +-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [self.delegate buttonItemBlocks_AlertViewDelegate:self didHandleAlertViewClickAtButtonIndex:buttonIndex]; +} + +@end + + + + @implementation UIAlertView (ButtonItemBlocks) - (id)initWithTitle:(NSString *)inTitle message:(NSString *)inMessage cancelButtonItem:(RIButtonItem *)inCancelButtonItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ... { - if((self = [self initWithTitle:inTitle message:inMessage delegate:self cancelButtonTitle:inCancelButtonItem.label otherButtonTitles:nil])) - { - NSMutableArray *buttonsArray = [self buttonItems]; - - RIButtonItem *eachItem; - va_list argumentList; - if (inOtherButtonItems) - { - [buttonsArray addObject: inOtherButtonItems]; - va_start(argumentList, inOtherButtonItems); - while((eachItem = va_arg(argumentList, RIButtonItem *))) - { - [buttonsArray addObject: eachItem]; - } - va_end(argumentList); - } - - for(RIButtonItem *item in buttonsArray) - { - [self addButtonWithTitle:item.label]; - } - - if(inCancelButtonItem) - [buttonsArray insertObject:inCancelButtonItem atIndex:0]; - - [self setDelegate:self]; - } - return self; + if((self = [self initWithTitle:inTitle message:inMessage delegate:self cancelButtonTitle:inCancelButtonItem.label otherButtonTitles:nil])) + { + NSMutableArray *buttonsArray = [self buttonItems]; + + RIButtonItem *eachItem; + va_list argumentList; + if (inOtherButtonItems) + { + [buttonsArray addObject: inOtherButtonItems]; + va_start(argumentList, inOtherButtonItems); + while((eachItem = va_arg(argumentList, RIButtonItem *))) + { + [buttonsArray addObject: eachItem]; + } + va_end(argumentList); + } + + for(RIButtonItem *item in buttonsArray) + { + [self addButtonWithTitle:item.label]; + } + + if(inCancelButtonItem) + [buttonsArray insertObject:inCancelButtonItem atIndex:0]; + + [self setDelegateToButtonItemBlocks_AlertViewDelegate]; + } + return self; } -- (NSInteger)addButtonItem:(RIButtonItem *)item +-(void)setDelegateToButtonItemBlocks_AlertViewDelegate { - NSInteger buttonIndex = [self addButtonWithTitle:item.label]; - [[self buttonItems] addObject:item]; - - if (![self delegate]) - { - [self setDelegate:self]; - } - - return buttonIndex; + ButtonItemBlocks_AlertViewDelegate* buttonItemBlocks_AlertViewDelegate = [ButtonItemBlocks_AlertViewDelegate new]; + [buttonItemBlocks_AlertViewDelegate setDelegate:(id)self]; + [self setButtonItemBlocks_AlertViewDelegate:buttonItemBlocks_AlertViewDelegate]; + [self setDelegate:buttonItemBlocks_AlertViewDelegate]; } -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +- (NSInteger)addButtonItem:(RIButtonItem *)item { - // If the button index is -1 it means we were dismissed with no selection - if (buttonIndex >= 0) - { - NSArray *buttonsArray = objc_getAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY); - RIButtonItem *item = [buttonsArray objectAtIndex:buttonIndex]; - if(item.action) - item.action(); - } - - objc_setAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + NSInteger buttonIndex = [self addButtonWithTitle:item.label]; + [[self buttonItems] addObject:item]; + + if (![self delegate]) + { + [self setDelegateToButtonItemBlocks_AlertViewDelegate]; + } + + return buttonIndex; } - (NSMutableArray *)buttonItems { - NSMutableArray *buttonItems = objc_getAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY); - if (!buttonItems) - { - buttonItems = [NSMutableArray array]; - objc_setAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY, buttonItems, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - - return buttonItems; + NSMutableArray *buttonItems = objc_getAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY); + if (!buttonItems) + { + buttonItems = [NSMutableArray array]; + objc_setAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY, buttonItems, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + return buttonItems; +} + +#pragma mark - ButtonItemBlocks_AlertViewDelegate_Delegate +-(void)buttonItemBlocks_AlertViewDelegate:(ButtonItemBlocks_AlertViewDelegate*)buttonItemBlocks_AlertViewDelegate didHandleAlertViewClickAtButtonIndex:(NSInteger)buttonIndex +{ + [self setButtonItemBlocks_AlertViewDelegate:nil]; + + // If the button index is -1 it means we were dismissed with no selection + if (buttonIndex >= 0) + { + NSArray *buttonsArray = objc_getAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY); + RIButtonItem *item = [buttonsArray objectAtIndex:buttonIndex]; + if(item.action) + item.action(); + } + + objc_setAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - AlertViewDelegate +-(ButtonItemBlocks_AlertViewDelegate*)buttonItemBlocks_AlertViewDelegate +{ + return objc_getAssociatedObject(self, (__bridge const void *)RI_AlertViewDelegate_ASS_KEY); +} + +-(void)setButtonItemBlocks_AlertViewDelegate:(ButtonItemBlocks_AlertViewDelegate*)buttonItemBlocks_AlertViewDelegate +{ + if ([self buttonItemBlocks_AlertViewDelegate] == buttonItemBlocks_AlertViewDelegate) + { + return; + } + + objc_setAssociatedObject(self, (__bridge const void *)RI_AlertViewDelegate_ASS_KEY, buttonItemBlocks_AlertViewDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end From 2c8cbf0ab8f38983f773b69c79b40814188f9609 Mon Sep 17 00:00:00 2001 From: BenMaer Date: Fri, 2 Jan 2015 02:42:43 -0500 Subject: [PATCH 7/7] Updates to import statements. --- UIActionSheet+ButtonItemBlocks.m | 2 +- UIAlertView+ButtonItemBlocks.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UIActionSheet+ButtonItemBlocks.m b/UIActionSheet+ButtonItemBlocks.m index b47ba16..a2c87e2 100644 --- a/UIActionSheet+ButtonItemBlocks.m +++ b/UIActionSheet+ButtonItemBlocks.m @@ -6,7 +6,7 @@ // Copyright 2011 Random Ideas, LLC. All rights reserved. // -#import "UIAlertView-ButtonItemBlocks/UIActionSheet+ButtonItemBlocks.h" +#import "UIActionSheet+ButtonItemBlocks.h" #import static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; diff --git a/UIAlertView+ButtonItemBlocks.m b/UIAlertView+ButtonItemBlocks.m index c862dc3..4330415 100644 --- a/UIAlertView+ButtonItemBlocks.m +++ b/UIAlertView+ButtonItemBlocks.m @@ -6,7 +6,7 @@ // Copyright 2010 Random Ideas, LLC. All rights reserved. // -#import "UIAlertView-ButtonItemBlocks/UIAlertView+ButtonItemBlocks.h" +#import "UIAlertView+ButtonItemBlocks.h" #import