// // UIButton+LMJ.m // iOSProject // // Created by windshan on 2017/12/28. // Copyright © 2017年 windshan. All rights reserved. // #import "UIButton+LMJ.h" static const void *UIButtonBlockKey = &UIButtonBlockKey; @implementation UIButton (LMJ) -(void)addActionHandler:(TouchedBlock)touchHandler{ objc_setAssociatedObject(self, UIButtonBlockKey, touchHandler, OBJC_ASSOCIATION_COPY_NONATOMIC); [self addTarget:self action:@selector(actionTouched:) forControlEvents:UIControlEventTouchUpInside]; } -(void)actionTouched:(UIButton *)btn{ TouchedBlock block = objc_getAssociatedObject(self, UIButtonBlockKey); if (block) { block(btn.tag); } } /** * @brief 使用颜色设置按钮背景 * * @param backgroundColor 背景颜色 * @param state 按钮状态 */ - (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state { [self setBackgroundImage:[UIButton imageWithColor:backgroundColor] forState:state]; } + (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } - (instancetype)initWithFrame:(CGRect)frame buttonTitle:(NSString *)buttonTitle normalBGColor:(UIColor *)normalBGColor selectBGColor:(UIColor *)selectBGColor normalColor:(UIColor *)normalColor selectColor:(UIColor *)selectColor buttonFont:(UIFont *)buttonFont cornerRadius:(CGFloat )cornerRadius doneBlock:(void(^)(UIButton *))doneBlock { self = [self initWithFrame:frame]; self.layer.masksToBounds=YES; self.layer.cornerRadius=cornerRadius; self.titleLabel.font=buttonFont; [self setTitle:buttonTitle forState:UIControlStateNormal]; [self setTitleColor:normalColor forState:UIControlStateNormal]; [self setTitleColor:selectColor forState:UIControlStateHighlighted]; [self setBackgroundImage:[UIImage imageWithColor:normalBGColor] forState:UIControlStateNormal]; [self setBackgroundImage:[UIImage imageWithColor:selectBGColor] forState:UIControlStateHighlighted]; TWWeak(self); [self addTapGestureRecognizer:^(UITapGestureRecognizer *recognizer, NSString *gestureId) { !doneBlock ?: doneBlock(weakself); }]; return self; } +(UIButton *)initWithFrame:(CGRect)frame buttonTitle:(NSString *)buttonTitle normalBGColor:(UIColor *)normalBGColor selectBGColor:(UIColor *)selectBGColor normalColor:(UIColor *)normalColor selectColor:(UIColor *)selectColor buttonFont:(UIFont *)buttonFont cornerRadius:(CGFloat )cornerRadius doneBlock:(void(^)(UIButton *))doneBlock { UIButton *solidColorButton=[[UIButton alloc]initWithFrame:frame buttonTitle:buttonTitle normalBGColor:normalBGColor selectBGColor:selectBGColor normalColor:normalColor selectColor:selectColor buttonFont:buttonFont cornerRadius:cornerRadius doneBlock:doneBlock]; return solidColorButton; } @end @implementation APRoundedButton - (void)makeCorner { UIRectCorner corners; switch ( self.style ) { case 0: corners = UIRectCornerBottomLeft; break; case 1: corners = UIRectCornerBottomRight; break; case 2: corners = UIRectCornerTopLeft; break; case 3: corners = UIRectCornerTopRight; break; case 4: corners = UIRectCornerBottomLeft | UIRectCornerBottomRight; break; case 5: corners = UIRectCornerTopLeft | UIRectCornerTopRight; break; case 6: corners = UIRectCornerBottomLeft | UIRectCornerTopLeft; break; case 7: corners = UIRectCornerBottomRight | UIRectCornerTopRight; break; case 8: corners = UIRectCornerBottomRight | UIRectCornerTopRight | UIRectCornerTopLeft; break; case 9: corners = UIRectCornerBottomRight | UIRectCornerTopRight | UIRectCornerBottomLeft; break; default: corners = UIRectCornerAllCorners; break; } _nj_cornerRaduous = _nj_cornerRaduous ?: 10.0; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(_nj_cornerRaduous, _nj_cornerRaduous)]; CAShapeLayer *maskLayer = [CAShapeLayer layer]; maskLayer.frame = self.bounds; maskLayer.path = maskPath.CGPath; self.layer.mask = maskLayer; } - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self setupUIOnce]; } return self; } - (instancetype)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self) { [self setupUIOnce]; } return self; } - (void)setupUIOnce { [self makeCorner]; } - (void)layoutSubviews { [super layoutSubviews]; [self makeCorner]; } @end