From 9516af390a978040cfbd341ebc0a5327e8103409 Mon Sep 17 00:00:00 2001 From: Dillan Laughlin Date: Sat, 26 Apr 2014 10:53:45 -0500 Subject: [PATCH] Create button item array on demand, making sure it's non-nil. When the alert view is created without using the init method in the category the button items array would be nil, causing the actions associated with new RIButtonItems to not fire. Also sets the delegate if needed. --- UIAlertView+Blocks.m | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/UIAlertView+Blocks.m b/UIAlertView+Blocks.m index e94f675..ec31cbb 100644 --- a/UIAlertView+Blocks.m +++ b/UIAlertView+Blocks.m @@ -13,24 +13,24 @@ @implementation UIAlertView (Blocks) --(id)initWithTitle:(NSString *)inTitle message:(NSString *)inMessage cancelButtonItem:(RIButtonItem *)inCancelButtonItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ... +-(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 = [NSMutableArray array]; + NSMutableArray *buttonsArray = [self buttonItems]; RIButtonItem *eachItem; va_list argumentList; - if (inOtherButtonItems) - { + if (inOtherButtonItems) + { [buttonsArray addObject: inOtherButtonItems]; - va_start(argumentList, inOtherButtonItems); - while((eachItem = va_arg(argumentList, RIButtonItem *))) + va_start(argumentList, inOtherButtonItems); + while((eachItem = va_arg(argumentList, RIButtonItem *))) { - [buttonsArray addObject: eachItem]; + [buttonsArray addObject: eachItem]; } va_end(argumentList); - } + } for(RIButtonItem *item in buttonsArray) { @@ -40,19 +40,20 @@ -(id)initWithTitle:(NSString *)inTitle message:(NSString *)inMessage cancelButto if(inCancelButtonItem) [buttonsArray insertObject:inCancelButtonItem atIndex:0]; - objc_setAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY, buttonsArray, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - [self setDelegate:self]; } return self; } - (NSInteger)addButtonItem:(RIButtonItem *)item -{ - NSMutableArray *buttonsArray = objc_getAssociatedObject(self, (__bridge const void *)RI_BUTTON_ASS_KEY); - +{ NSInteger buttonIndex = [self addButtonWithTitle:item.label]; - [buttonsArray addObject:item]; + [[self buttonItems] addObject:item]; + + if (![self delegate]) + { + [self setDelegate:self]; + } return buttonIndex; } @@ -71,4 +72,16 @@ - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)butto 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