一. 簡述
在項(xiàng)目中, Block的鏈?zhǔn)骄幊炭隙ㄊ菚?huì)用到的. 如一些框架等.
而對(duì)于項(xiàng)目中一些自定義的工具或view, 在以下情況時(shí):
- 1.可以包裝完整
- 2.有多個(gè)屬性可以設(shè)置
- 3.在項(xiàng)目中多處被用到
最好實(shí)現(xiàn)Block的鏈?zhǔn)骄幊? 如此對(duì)團(tuán)隊(duì)非常有好處.
注: block的鏈?zhǔn)? 即block有返回值, 且返回當(dāng)前對(duì)象
二.舉例
項(xiàng)目中需要自定義UINavigationBar, 符合上述3個(gè)條件.
- 1.設(shè)置只讀的, 有返回值的
block屬性
/** 設(shè)置下劃線 */
@property (nonatomic, copy, readonly) YHNavigationBarView *(^setupUnderline)(void);
///左按鈕圖片
@property (nonatomic, copy, readonly) YHNavigationBarView *(^leftBtnImage)(UIImage *image);
///左按鈕標(biāo)題
@property (nonatomic, copy, readonly) YHNavigationBarView *(^leftBtnTitle)(NSString *title);
///右按鈕圖片
@property (nonatomic, copy, readonly) YHNavigationBarView *(^rightBtnImage)(UIImage *image);
///右按鈕標(biāo)題
@property (nonatomic, copy, readonly) YHNavigationBarView *(^rightBtnTitle)(NSString *title);
///標(biāo)題按鈕圖片
@property (nonatomic, copy, readonly) YHNavigationBarView *(^titleBtnImage)(UIImage *image);
///標(biāo)題按鈕的標(biāo)題
@property (nonatomic, copy, readonly) YHNavigationBarView *(^titleBtnTitle)(NSString *title);
- 2.重寫
getter - 2.1
///設(shè)置下劃線
- (YHNavigationBarView *(^)(void))setupUnderline{
return ^YHNavigationBarView *(void){
//下劃線
UIView *underlineView = [UIView new];
underlineView.backgroundColor = [UIColor colorWithHexString:@"#EEEEEE"];
[self addSubview:underlineView];
[underlineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self);
make.right.equalTo(self);
make.bottom.equalTo(self);
make.height.equalTo(@1);
}];
return self;
};
}
- 2.2
///左按鈕圖片
- (YHNavigationBarView *(^)(UIImage *))leftBtnImage{
return ^YHNavigationBarView *(UIImage *image){
[self.leftBtn setImage:image forState:UIControlStateNormal];
return self;
};
}
其它getter方法與以上兩個(gè)方法類似, 就不浪費(fèi)篇章了.
- 3.調(diào)用
- 3.1 eg1
self.navBar.setupLeftBackBtn(self, YHBackImgTypeBlack).setupUnderline().
setupRightPlayBtn(self, nil, navBarplayBtn, ^{
[UIViewController yh_fromCurrentShowingVcToDestionVc:[YHPlayMusicVc new]];
});
- 3.2 eg2
self.navBar.setupLeftBackBtn(self, YHBackImgTypeBlack).
setupTitleBtn(nil, @"修改昵稱", nil);
- 3.3 注意循環(huán)引用
navBar.titleBtnAlpha(0).setupLeftBtn([UIImage imageNamed:@"nav_toolbar_back_white"], nil, ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
}).setupRightBtn([UIImage imageNamed:@"nav_share_white"], nil, ^{
[weakSelf navRightButtonClick];
}).setupTitleBtn(nil, self.titleStr, nil);