forked from brightsoftdev/Additions-1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
UIAlertView+Additions.m
122 lines (98 loc) · 3.67 KB
/
UIAlertView+Additions.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// UIAlertView+Additions.m
//
// Created by Wess Cope on 6/1/11.
// Copyright 2012. All rights reserved.
//
#import <objc/runtime.h>
#import "UIAlertView+Additions.h"
@implementation UIAlertView (Additions)
static char BB_KEY;
@dynamic buttonsAndBlocks;
static char FL_DELEGATE_KEY;
@dynamic flDelegate;
- (void)setButtonsAndBlocks:(NSMutableDictionary *)buttonsAndBlocks
{
objc_setAssociatedObject(self, &BB_KEY, buttonsAndBlocks, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSMutableDictionary *)buttonsAndBlocks
{
return (NSMutableDictionary *)objc_getAssociatedObject(self, &BB_KEY);
}
- (void)setFlDelegate:(id<UIAlertViewDelegate>)flDelegate
{
objc_setAssociatedObject(self, &FL_DELEGATE_KEY, flDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id<UIAlertViewDelegate>)flDelegate
{
return (id<UIAlertViewDelegate>)objc_getAssociatedObject(self, &FL_DELEGATE_KEY);
}
+ (UIAlertView *)alertViewWithTitle:(NSString *)title message:(NSString *)message
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
return alert;
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(self.flDelegate AND [self.flDelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)])
[self.flDelegate alertView:alertView clickedButtonAtIndex:buttonIndex];
UIAlertViewBlock block = [[self buttonsAndBlocks] objectForKey:[NSNumber numberWithInteger:buttonIndex]];
block();
}
#pragma mark - Delegate Methods
- (void)alertViewCancel:(UIAlertView *)alertView
{
if(self.flDelegate AND [self.flDelegate respondsToSelector:@selector(alertViewCancel:)])
[self.flDelegate alertViewCancel:alertView];
}
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
if(self.flDelegate AND [self.flDelegate respondsToSelector:@selector(alertView:willDismissWithButtonIndex:)])
[self.flDelegate alertView:alertView willDismissWithButtonIndex:buttonIndex];
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if(self.flDelegate AND [self.flDelegate respondsToSelector:@selector(alertView:didDismissWithButtonIndex:)])
[self.flDelegate alertView:alertView didDismissWithButtonIndex:buttonIndex];
}
- (void)willPresentAlertView:(UIAlertView *)alertView
{
if(self.flDelegate AND [self.flDelegate respondsToSelector:@selector(willPresentAlertView:)])
[self.flDelegate willPresentAlertView:alertView];
}
- (void)didPresentAlertView:(UIAlertView *)alertView
{
if(self.flDelegate AND [self.flDelegate respondsToSelector:@selector(didPresentAlertView:)])
[self.flDelegate didPresentAlertView:alertView];
}
#pragma mark - Public Methods
- (void)setupAdditions
{
if([self buttonsAndBlocks] == NULL)
{
NSMutableDictionary *tmp = [[NSMutableDictionary alloc] init];
[self setButtonsAndBlocks:tmp];
}
if([self flDelegate] == NULL)
{
[self setFlDelegate:self.delegate];
[self setDelegate:self];
}
}
- (NSInteger)__addButtonWithTitle:(NSString *)title block:(UIAlertViewBlock)block
{
[self setupAdditions];
NSInteger idx = [self addButtonWithTitle:title];
NSNumber *index = [NSNumber numberWithInteger:idx];
[[self buttonsAndBlocks] setObject:block forKey:index];
return idx;
}
- (void)cancelButtonWithTitle:(NSString *)title block:(UIAlertViewBlock)block
{
self.cancelButtonIndex = [self __addButtonWithTitle:title block:block];
}
- (void)addButtonWithTitle:(NSString *)title block:(UIAlertViewBlock)block
{
[self __addButtonWithTitle:title block:block];
}
@end