Buttonイベントの閉パッケージ転送
4551 ワード
ビジネスではbuttonのイベントクリックがよく使われていますが、BlockKitやRACの高集約イベントクリックの書き方に慣れた後、感覚方法が飛び回るのは面倒なので、わざわざ分類を書いてこの弊害を修正します.この分類には機能も含まれています.
主なコードは次のとおりです.
.h
.m
1. addTarget
2.
3. image label
主なコードは次のとおりです.
.h
#import
@interface UIButton (XHAdd)
//button image label
typedef enum : NSUInteger{
XHButtonImageLocatedLabelTop,
XHButtonImageLocatedLabelButtom,
XHButtonImageLocatedLabelLeft,
XHButtonImageLocatedLabelRight
}XHButtonImageLocatedLabelEnum;
//
-(void)xh_ButtonImageLocatedLabel:(XHButtonImageLocatedLabelEnum)located whitSpace:(CGFloat)space;
// button
-(void)xh_buttonBanWithTheCountdown:(int)time;
//
-(void)xh_blockWhitControlEvents:(UIControlEvents)ControlEvents block:(void(^)())block;
@end
.m
#import "UIButton+XHAdd.h"
#import "NSTimer+XHAdd.h"
#import
typedef void(^ButtonClikcBlock)();
@interface UIButton()
@property (nonatomic ,copy ) ButtonClikcBlock block;
@end
@implementation UIButton (HXAdd)
-(void)xh_ButtonImageLocatedLabel:(XHButtonImageLocatedLabelEnum)located whitSpace:(CGFloat)space{
// NSLog(@"label:%@,imageView:%@",self.titleLabel,self.imageView);
CGFloat imageWidth = self.imageView.frame.size.height;
CGFloat imageHeight = self.imageView.frame.size.width;
CGFloat labelWidth = 0.0;
CGFloat labelHeight = 0.0;
if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
// iOS8 titleLabel size 0,
labelWidth = self.titleLabel.intrinsicContentSize.width;
labelHeight = self.titleLabel.intrinsicContentSize.height;
}else{
labelWidth = self.titleLabel.frame.size.width;
labelHeight = self.titleLabel.frame.size.height;
}
// 2. imageEdgeInsets labelEdgeInsets
UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
// 3. style space imageEdgeInsets labelEdgeInsets
switch (located) {
case XHButtonImageLocatedLabelTop:{
imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);
labelEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, -imageHeight-space/2.0, 0);
}
break;
case XHButtonImageLocatedLabelButtom:{
imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);
labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWidth, 0, 0);
}
break;
case XHButtonImageLocatedLabelLeft:{
imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
}
break;
case XHButtonImageLocatedLabelRight:{
imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0);
labelEdgeInsets = UIEdgeInsetsMake(0, -imageWidth-space/2.0, 0, imageWidth+space/2.0);
}
break;
}
// 4.
self.titleEdgeInsets = labelEdgeInsets;
self.imageEdgeInsets = imageEdgeInsets;
}
-(void)xh_buttonBanWithTheCountdown:(int)time{
//1.
self.enabled = NO;
__block int count = time;
//2.
[self setTitle:[NSString stringWithFormat:@"%ds",count] forState:UIControlStateDisabled];
//3. ( NSTimer )
__block NSTimer* timer = [NSTimer xh_scheduledTimerWithTimeInterval:1 block:^{
if (count <= 0) {
//5.
[timer invalidate];
timer = nil;
self.enabled = YES;
}else{
//4.
count--;
[self setTitle:[NSString stringWithFormat:@"%ds",count] forState:UIControlStateDisabled];
}
} repeats:YES];
}
//addTarget
-(void)xh_blockWhitControlEvents:(UIControlEvents)ControlEvents block:(void(^)())block{
[self addTarget:self action:@selector(xh_buttonClick:) forControlEvents:ControlEvents];
self.block = block;
}
-(void)xh_buttonClick:(UIButton*)button{
if (self.block) {
self.block();
}
}
#pragma set/get
-(void)setBlock:(ButtonClikcBlock)block{
if (block) {
objc_setAssociatedObject(self, _cmd, block, OBJC_ASSOCIATION_COPY);
}
}
-(ButtonClikcBlock)block{
return objc_getAssociatedObject(self, @selector(setBlock:));
}
@end