ELKChainedAlloy基于OC的鏈式編程框架

基于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鏈式編程框架的使用


集成ELKChainedAlloypods庫到項目中

使用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);
}];
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稚疹,一起剝皮案震驚了整個濱河市居灯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌内狗,老刑警劉巖怪嫌,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柳沙,居然都是意外死亡岩灭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門偎行,熙熙樓的掌柜王于貴愁眉苦臉地迎上來川背,“玉大人贰拿,你說我怎么就攤上這事∠ㄔ疲” “怎么了膨更?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缴允。 經(jīng)常有香客問我荚守,道長,這世上最難降的妖魔是什么练般? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任矗漾,我火速辦了婚禮,結果婚禮上薄料,老公的妹妹穿的比我還像新娘敞贡。我一直安慰自己,他們只是感情好摄职,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布誊役。 她就那樣靜靜地躺著,像睡著了一般谷市。 火紅的嫁衣襯著肌膚如雪蛔垢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天迫悠,我揣著相機與錄音鹏漆,去河邊找鬼。 笑死创泄,一個胖子當著我的面吹牛艺玲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播验烧,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼板驳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碍拆?” 一聲冷哼從身側響起若治,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎感混,沒想到半個月后端幼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡弧满,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年婆跑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庭呜。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡滑进,死狀恐怖犀忱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扶关,我是刑警寧澤阴汇,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站节槐,受9級特大地震影響搀庶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铜异,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一哥倔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揍庄,春花似錦咆蒿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缆镣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間试浙,已是汗流浹背董瞻。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留田巴,地道東北人钠糊。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像壹哺,于是被迫代替她去往敵國和親抄伍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344