~threeve/ubuntuone-ios-files/logout-cleanup

« back to all changes in this revision

Viewing changes to Dependencies/UIActionSheet+Blocks.m

  • Committer: Zachery Bir
  • Date: 2011-11-01 14:28:05 UTC
  • mfrom: (6.2.116 auto-uploads-view)
  • Revision ID: zachery.bir@canonical.com-20111101142805-uyjwtzm552h638r2
Merged urbanape's auto-uploads-view branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
//  UIActionSheet+Blocks.m
 
3
//  Shibui
 
4
//
 
5
//  Created by Jiva DeVoe on 1/5/11.
 
6
//  Copyright 2011 Random Ideas, LLC. All rights reserved.
 
7
//
 
8
 
 
9
#import "UIActionSheet+Blocks.h"
 
10
#import <objc/runtime.h>
 
11
 
 
12
static NSString *RI_BUTTON_ASS_KEY = @"com.random-ideas.BUTTONS";
 
13
 
 
14
@implementation UIActionSheet (Blocks)
 
15
 
 
16
-(id)initWithTitle:(NSString *)inTitle cancelButtonItem:(RIButtonItem *)inCancelButtonItem destructiveButtonItem:(RIButtonItem *)inDestructiveItem otherButtonItems:(RIButtonItem *)inOtherButtonItems, ...
 
17
{
 
18
    if((self = [self initWithTitle:inTitle delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]))
 
19
    {
 
20
        NSMutableArray *buttonsArray = [NSMutableArray array];
 
21
        
 
22
        RIButtonItem *eachItem;
 
23
        va_list argumentList;
 
24
        if (inOtherButtonItems)
 
25
        {
 
26
            [buttonsArray addObject: inOtherButtonItems];
 
27
            va_start(argumentList, inOtherButtonItems);
 
28
            while((eachItem = va_arg(argumentList, RIButtonItem *)))
 
29
            {
 
30
                [buttonsArray addObject: eachItem];
 
31
            }
 
32
            va_end(argumentList);
 
33
        }
 
34
        
 
35
        for(RIButtonItem *item in buttonsArray)
 
36
        {
 
37
            [self addButtonWithTitle:item.label];
 
38
        }
 
39
        
 
40
        if(inDestructiveItem)
 
41
        {
 
42
            [buttonsArray addObject:inDestructiveItem];
 
43
            NSInteger destIndex = [self addButtonWithTitle:inDestructiveItem.label];
 
44
            [self setDestructiveButtonIndex:destIndex];
 
45
        }
 
46
        if(inCancelButtonItem)
 
47
        {
 
48
            [buttonsArray addObject:inCancelButtonItem];
 
49
            NSInteger cancelIndex = [self addButtonWithTitle:inCancelButtonItem.label];
 
50
            [self setCancelButtonIndex:cancelIndex];
 
51
        }
 
52
        
 
53
        objc_setAssociatedObject(self, RI_BUTTON_ASS_KEY, buttonsArray, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
 
54
        
 
55
        [self retain]; // keep yourself around!
 
56
    }
 
57
    return self;
 
58
}
 
59
 
 
60
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
 
61
{
 
62
    NSArray *buttonsArray = objc_getAssociatedObject(self, RI_BUTTON_ASS_KEY);
 
63
    RIButtonItem *item = [buttonsArray objectAtIndex:buttonIndex];
 
64
    if(item.action)
 
65
        item.action();
 
66
    objc_setAssociatedObject(self, RI_BUTTON_ASS_KEY, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
 
67
    [self release]; // and release yourself!
 
68
}
 
69
 
 
70
 
 
71
@end