基于Object-C的鏈式編程框架源碼及 cocoapods 庫在這里:ELKChainedAlloy鏈式編程框架庫
基于Objective-C
的簡單易用的鏈式編程框架印蓖,通過.
調(diào)用方法,實現(xiàn)快速編程。
提供常用系統(tǒng)控件的鏈式編程方法,提升開發(fā)效率传黄,持續(xù)更新中突想。刀诬。。
什么是鏈式編程屋灌?
鏈式編程就是將多個方法用點語法鏈接起來洁段,讓代碼更加簡潔,可讀性更強共郭。例如我們常用的Masonry
祠丝,例如下面這段添加約束的代碼:
// 設置控件的寬和高都為100
make.width.height.equalTo(@100);
這句代碼相當于調(diào)用了如下三個方法:
- (MASConstraint *)width {
return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth];
}
- (MASConstraint *)height {
return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight];
}
- (MASConstraint * (^)(id))equalTo {
return ^id(id attribute) {
return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
};
}
鏈式編程的原理就是調(diào)用的屬性或者方法的返回值是調(diào)用者本身,Masonry
中的鏈式編程的特點是方法或者屬性的返回值是block落塑,block的返回值是調(diào)用者本身纽疟,block的參數(shù)是需要處理的參數(shù)。
ELKChainedAlloy
鏈式編程框架的方式和Masonry
相同憾赁,方法和屬性的返回值是block,通過block的形參傳遞需要處理的參數(shù)散吵,block的返回值為調(diào)用者本身龙考,從而實現(xiàn)了通過點語法鏈式調(diào)用方法。
ELKChainedAlloy
鏈式編程框架的使用
集成ELKChainedAlloy
pods庫到項目中
使用CocoaPods
搜索ELKChainedAlloy
開源庫:
# 搜索 ELKChainedAlloy 庫
pod search ELKChainedAlloy
# 如果上面的搜索語法搜不到結果矾睦,可使用下面的語法進行搜索
pod search ELKChainedAlloy --simple
在工程的Podfile
中添加如下代碼:
pod 'ELKChainedAlloy'
保存并執(zhí)行pod install
晦款,然后用后綴為.xcworkspace
的文件打開工程。
ELKChainedAlloy
框架的詳細使用及說明
- UIView
// 創(chuàng)建一個view枚冗,并且設置背景色缓溅,切圓角,設置border以及frame
UIView *view = [UIView elk_makeBlock:^(UIView * _Nonnull make) {
make.elk_setBackgroundColor(UIColor.purpleColor)
.elk_setCornerRadius(5.f)
.elk_setMaskToBounds(YES)
.elk_setBorderColor(UIColor.darkGrayColor)
.elk_setBorderWidth(2.f)
.elk_setFrameMake(30.f, 100.f, 230.f, 30.f);
}];
self.view.elk_addSubview(view);
// 也可以直接使用系統(tǒng)方法創(chuàng)建赁温,然后使用鏈式設置屬性
// 或者使用view1 = [UIView elk_make];方法創(chuàng)建UIView
UIView *view1 = [[UIView alloc] init];
view1.elk_setBackgroundColor(UIColor.cyanColor)
.elk_setCornerRadius(5.f)
.elk_setMaskToBounds(YES)
.elk_setBorderColor(UIColor.grayColor)
.elk_setBorderWidth(2.f)
.elk_setFrameMake(140.f, 100.f, 100.f, 30.f);
self.view.elk_addSubview(view1);
- UIButton
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
// 設置Normal狀態(tài)的title
button.elk_setTitle(@"編輯", UIControlStateNormal)
// 設置Highlighted狀態(tài)的title
.elk_setTitleForHighlighted(@"編輯")
// 設置Highlighted狀態(tài)的titleColor
.elk_setTitleColor(UIColor.greenColor, UIControlStateHighlighted)
// 設置Normal狀態(tài)的titleColor
.elk_setTitleColorForNormal(UIColor.whiteColor)
// 設置字體
.elk_setTitleLabelFont([UIFont systemFontOfSize:14])
// 設置Highlighted狀態(tài)的Attribute字體大小
.elk_setAttrFont([UIFont systemFontOfSize:16], UIControlStateHighlighted)
// 設置Highlighted狀態(tài)的Attribute字體顏色
.elk_setAttrTitleColor(UIColor.greenColor, UIControlStateHighlighted)
// 設置Selected狀態(tài)的title坛怪,字體大小,字體顏色
.elk_setTitleFontAndColor(@"完成" ,[UIFont systemFontOfSize:14], UIColor.blueColor, UIControlStateSelected)
// 設置Normal狀態(tài)的image
.elk_setImageForNormal([UIImage imageNamed:@"icon_setting"])
// 設置Selected狀態(tài)的image
.elk_setImage([UIImage imageNamed:@"icon_setting"], UIControlStateSelected)
// 設置Normal狀態(tài)的背景圖片
.elk_setBackgroundImageForNormal([UIImage imageNamed:@"elk_button_back"])
// 以SEL方式給button添加事件
.elk_addTarget(self, @selector(editBtnTouchUpInside:), UIControlEventTouchUpInside)
// 以Block方式給button添加事件
.elk_addTargetBlock(UIControlEventTouchUpOutside, ^(UIButton * _Nonnull sender) {
NSLog(@"edit Button Touch Up Outside");
sender.elk_setSelected(!sender.isSelected);
})
// 設置背景顏色
.elk_setBackgroundColor(UIColor.clearColor);
- UILabel
UILabel *label = [UILabel elk_make];
// 設置text
label.elk_setText(@"林夕")
// 字體
.elk_setFont([UIFont systemFontOfSize:16])
// 字體顏色
.elk_setTextColor(UIColor.whiteColor)
// 顯示行數(shù)
.elk_setNumberOfLines(1)
// 對齊方式
.elk_setTextAlignment(NSTextAlignmentCenter);
- UIImageView
UIImageView *imgView = [[UIImageView alloc] init];
// 設置圖片
imgView.elk_setImageNamed(@"imageName")
// 內(nèi)容填充方式
.elk_setContentMode(UIViewContentModeScaleAspectFill)
// 背景色
.elk_setBackgroundColor(UIColor.clearColor)
.elk_setCornerRadius(36.f)
.elk_setMaskToBounds(YES)
.elk_setBorderColor(UIColor.whiteColor)
.elk_setBorderWidth(2.f);
- UITableView (UIScrollView股囊、UICollectionView 用法相似)
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
tableView.elk_setDelegate(self)
.elk_setDataSource(self)
.elk_setSeparatorStyle(UITableViewCellSeparatorStyleSingleLine)
.elk_setSeparatorColor(UIColor.grayColor)
.elk_setSeparatInset(UIEdgeInsetsMake(0.f, 15.f, 0.f, 15.f))
.elk_registerClassForCell(ELKTableViewCell.class, @"ELKTableViewCell");
- UITextView
UITextView *tv = [UITextView elk_makeBlock:^(UITextView * _Nonnull make) {
make.elk_setText(@"這里是textview袜匿,我是內(nèi)容我是內(nèi)容~")
.elk_setFont([UIFont systemFontOfSize:14.f])
.elk_setTextColor(UIColor.whiteColor)
.elk_setTextAlignment(NSTextAlignmentLeft)
.elk_setTag(100)
.elk_setBackgroundColor(UIColor.redColor)
.elk_setFrame(CGRectMake(30.f, 150.f, 280.f, 70.f));
}];
- UITextField
UITextField *tf = [UITextField elk_makeBlock:^(UITextField * _Nonnull make) {
UIImageView *leftView = [UIImageView elk_makeBlock:^(UIImageView * _Nonnull make) {
make.elk_setImageNamed(@"elk_search")
.elk_setBackgroundColor(UIColor.clearColor)
.elk_setFrameMake(0.f, 0.f, 30.f, 30.f);
}];
make.elk_setText(@"我是textField,這里是內(nèi)容")
.elk_setPlaceholder(@"我是placeholder")
.elk_setTextColor(UIColor.blueColor)
.elk_setSysFont(14)
.elk_setLeftViewMode(UITextFieldViewModeAlways)
.elk_setLeftView(leftView)
.elk_setClearButtonMode(UITextFieldViewModeWhileEditing)
.elk_setFrameMake(30, 240.f, 280.f, 34.f)
.elk_setBackgroundColor(UIColor.greenColor);
}];