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 96% rename from UIActionSheet+Blocks.m rename to UIActionSheet+ButtonItemBlocks.m index b852947..a2c87e2 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 "UIActionSheet+Blocks.h" +#import "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+Blocks.m b/UIAlertView+Blocks.m deleted file mode 100644 index 4594980..0000000 --- a/UIAlertView+Blocks.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// UIAlertView+Blocks.m -// Shibui -// -// Created by Jiva DeVoe on 12/28/10. -// Copyright 2010 Random Ideas, LLC. All rights reserved. -// - -#import "UIAlertView+Blocks.h" -#import - -static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS"; - -@implementation UIAlertView (Blocks) - -- (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; -} - -- (NSInteger)addButtonItem:(RIButtonItem *)item -{ - NSInteger buttonIndex = [self addButtonWithTitle:item.label]; - [[self buttonItems] addObject:item]; - - if (![self delegate]) - { - [self setDelegate:self]; - } - - return buttonIndex; -} - -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - // 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); -} - -- (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; -} - -@end diff --git a/UIAlertView+Blocks.h b/UIAlertView+ButtonItemBlocks.h similarity index 84% rename from UIAlertView+Blocks.h rename to UIAlertView+ButtonItemBlocks.h index 6fec7ca..fd693e5 100644 --- a/UIAlertView+Blocks.h +++ b/UIAlertView+ButtonItemBlocks.h @@ -1,5 +1,5 @@ // -// UIAlertView+Blocks.h +// UIAlertView+ButtonItemBlocks.h // Shibui // // Created by Jiva DeVoe on 12/28/10. @@ -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+ButtonItemBlocks.m b/UIAlertView+ButtonItemBlocks.m new file mode 100644 index 0000000..4330415 --- /dev/null +++ b/UIAlertView+ButtonItemBlocks.m @@ -0,0 +1,154 @@ +// +// UIAlertView+ButtonItemBlocks.m +// Shibui +// +// Created by Jiva DeVoe on 12/28/10. +// Copyright 2010 Random Ideas, LLC. All rights reserved. +// + +#import "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 setDelegateToButtonItemBlocks_AlertViewDelegate]; + } + return self; +} + +-(void)setDelegateToButtonItemBlocks_AlertViewDelegate +{ + ButtonItemBlocks_AlertViewDelegate* buttonItemBlocks_AlertViewDelegate = [ButtonItemBlocks_AlertViewDelegate new]; + [buttonItemBlocks_AlertViewDelegate setDelegate:(id)self]; + [self setButtonItemBlocks_AlertViewDelegate:buttonItemBlocks_AlertViewDelegate]; + [self setDelegate:buttonItemBlocks_AlertViewDelegate]; +} + +- (NSInteger)addButtonItem:(RIButtonItem *)item +{ + 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; +} + +#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 diff --git a/UIAlertView-Blocks.podspec b/UIAlertView-ButtonItemBlocks.podspec similarity index 93% rename from UIAlertView-Blocks.podspec rename to UIAlertView-ButtonItemBlocks.podspec index 423e16d..5f93f67 100644 --- a/UIAlertView-Blocks.podspec +++ b/UIAlertView-ButtonItemBlocks.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'