簡單的鏈式語法及實際運用(鏈式編程的基本原理)


不管在什么項目中總會有一些控件,它們樣式相似卻根據不同場景又有所不同。雖然也寫了一些便利構造函數來快速的創建一些控件,但總感覺不盡人意,想用更少的代碼來創建它們。

所以想到了鏈式語法,在查詢部分資料和嘗試后有了這篇日記。
直接百度的參考文章:
http://www.jianshu.com/p/a1458a69f72b

作者的總結很精髓
>首先獲得實例中的一個block,然后執行block並返回實例本身,然后再執行實例的另一個block,而在這個block中同樣返回實例本身,按此規律通過點語法一直往下執行。

接着我試着寫了一個簡單的可以用於快速創建UIButton的類:

.h文件內容

// Created by chizheng 

#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 

#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

 

創建按鈕時只需要如下代碼

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];

 

后來感覺還是寫成UIButton的分類會更好用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM