不管在什么項(xiàng)目中總會有一些控件乌逐,它們樣式相似卻根據(jù)不同場景又有所不同。雖然也寫了一些便利構(gòu)造函數(shù)來快速的創(chuàng)建一些控件,但總感覺不盡人意,想用更少的代碼來創(chuàng)建它們右冻。
所以想到了鏈?zhǔn)秸Z法,在查詢部分資料和嘗試后有了這篇日記著拭。
直接百度的參考文章:
簡書鏈接
作者的總結(jié)很精髓
首先獲得實(shí)例中的一個(gè)block,然后執(zhí)行block并返回實(shí)例本身牍帚,然后再執(zhí)行實(shí)例的另一個(gè)block儡遮,而在這個(gè)block中同樣返回實(shí)例本身,按此規(guī)律通過點(diǎn)語法一直往下執(zhí)行暗赶。
接著我試著寫了一個(gè)簡單的可以用于快速創(chuàng)建UIButton的類:
.h文件內(nèi)容
// Created by chizheng on 2017/6/20.
// Copyright ? 2017年 yg-technology. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface CHZButton : UIButton
@property (nonatomic, copy) CHZButton * (^setTitle)(NSString *,UIControlState);
@property (nonatomic, copy) CHZButton * (^setTitleColor)(UIColor *,UIControlState);
@property (nonatomic, copy) CHZButton * (^setFont)(CGFloat);
@property (nonatomic, copy) CHZButton * (^setBackgroundColor)(UIColor *);
@property (nonatomic, copy) CHZButton * (^setCornerRadius)(CGFloat);
@property (nonatomic, copy) CHZButton * (^setImage)(NSString *,UIControlState);
@property (nonatomic, copy) CHZButton * (^addAction)(id,SEL,UIControlEvents);
@end
// Created by chizheng on 2017/6/20.
// Copyright ? 2017年 yg-technology. All rights reserved.
//
#import "CHZButton.h"
@implementation CHZButton
- (CHZButton * (^)(NSString * title,UIControlState state))setTitle{
return ^(NSString * title,UIControlState state){
[self setTitle:title forState:state];
return self;
};
}
- (CHZButton * (^)(UIColor * titleColor,UIControlState state))setTitleColor{
return ^(UIColor * titleColor,UIControlState state){
[self setTitleColor:titleColor forState:state];
return self;
};
}
- (CHZButton * (^)(CGFloat font))setFont{
return ^(CGFloat font){
self.titleLabel.font = [UIFont systemFontOfSize:font];
return self;
};
}
- (CHZButton * (^)(UIColor * backgroundColor))setBackgroundColor{
return ^(UIColor * backgroundColor){
[self setBackgroundColor:backgroundColor];
return self;
};
}
- (CHZButton * (^)(CGFloat cornerRadius))setCornerRadius{
return ^(CGFloat cornerRadius){
self.layer.cornerRadius = cornerRadius;
self.clipsToBounds = YES;
return self;
};
}
- (CHZButton * (^)(NSString * imageName,UIControlState state))setImage{
return ^(NSString * imageName,UIControlState state){
[self setImage:[UIImage imageNamed:imageName] forState:state];
return self;
};
}
- (CHZButton * (^)(id target,SEL selector,UIControlEvents events))addAction{
return ^(id target,SEL selector,UIControlEvents events){
[self addTarget:target action:selector forControlEvents:events];
return self;
};
}
@end
創(chuàng)建按鈕時(shí)只需要如下代碼
CHZButton * btn = [CHZButton new];
btn.frame = CGRectMake(Margin_leading, 64, screenW-2*Margin_leading, 44);
btn.setFont(18).setTitle(@"測試按鈕", UIControlStateNormal).setBackgroundColor(btn_Color).setCornerRadius(4);
btn.addAction(self, @selector(btnAction:), UIControlEventTouchUpInside);
[self.view addSubview:btn];