-
Notifications
You must be signed in to change notification settings - Fork 10
/
ILBarButtonItem.m
128 lines (105 loc) · 3.92 KB
/
ILBarButtonItem.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
123
124
125
126
127
128
//
// ILBarButtonItem.m
// Version 1.1
// Created by Isaac Lim (isaacl.net) on 1/1/13.
//
#import "ILBarButtonItem.h"
@interface ILBarButtonItem() {
id customTarget;
UIButton *customButton;
}
@end
@implementation ILBarButtonItem
- (id)initWithImage:(UIImage *)image
selectedImage:(UIImage *)selectedImage
target:(id)target action:(SEL)action
{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(0.0f, 0.0f, 30.0f, 30.0f)];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn setImage:image forState:UIControlStateNormal];
[btn setImage:selectedImage forState:UIControlStateHighlighted];
/* Init method inherited from UIBarButtonItem */
self = [[ILBarButtonItem alloc] initWithCustomView:btn];
if (self) {
/* Assign ivars */
customButton = btn;
customImage = image;
customSelectedImage = selectedImage;
customTarget = target;
customAction = action;
}
return self;
}
+ (ILBarButtonItem *)barItemWithImage:(UIImage *)image
selectedImage:(UIImage *)selectedImage
target:(id)target
action:(SEL)action
{
return [[ILBarButtonItem alloc] initWithImage:image
selectedImage:selectedImage
target:target
action:action];
}
- (void)setCustomImage:(UIImage *)image
{
customImage = image;
[customButton setImage:image forState:UIControlStateNormal];
}
- (void)setCustomSelectedImage:(UIImage *)image
{
customSelectedImage = image;
[customButton setImage:image forState:UIControlStateHighlighted];
}
#pragma mark - Text
- (id)initWithTitle:(NSString *)title
themeColor:(UIColor *)themeColor
target:(id)target
action:(SEL)action
{
CGSize maxButtonSize = CGSizeMake(MAXFLOAT, 30);
CGFloat width = [title sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:maxButtonSize
lineBreakMode:NSLineBreakByCharWrapping].width;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(0.0f, 0.0f, width + 20, 30.0f)];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn setTitle:title forState:UIControlStateNormal];
[btn setTitleColor:themeColor forState:UIControlStateNormal];
[btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
[btn.titleLabel setFont:[UIFont fontWithName:@"AvenirNext-Regular" size:16]];
[btn setImage:nil forState:UIControlStateNormal];
[btn setImage:nil forState:UIControlStateHighlighted];
/* Init method inherited from UIBarButtonItem */
self = [[ILBarButtonItem alloc] initWithCustomView:btn];
if (self) {
/* Assign ivars */
customButton = btn;
customImage = nil;
customSelectedImage = nil;
customTarget = target;
customAction = action;
}
return self;
}
+ (ILBarButtonItem *)barItemWithTitle:(NSString *)title
themeColor:(UIColor *)themeColor
target:(id)target
action:(SEL)action
{
return [[ILBarButtonItem alloc] initWithTitle:title
themeColor:themeColor
target:target
action:action];
}
#pragma mark - Actions
- (void)setCustomAction:(SEL)action {
customAction = action;
[customButton removeTarget:nil
action:NULL
forControlEvents:UIControlEventAllEvents];
[customButton addTarget:customTarget
action:action
forControlEvents:UIControlEventTouchUpInside];
}
@end