LightweightUITableView介紹

haiKe

源碼地址

LightweightUITalbeView項(xiàng)目是一個(gè)簡(jiǎn)化UITableView開發(fā)的輕量級(jí)類庫(kù),使用它你可以不用再編寫繁雜的數(shù)據(jù)源和代理方法铛只,可以不用再手動(dòng)維護(hù)可變高度的Cell行高埠胖,所有的這一切均有類庫(kù)自動(dòng)實(shí)現(xiàn),讓開發(fā)者只需要關(guān)注具體的業(yè)務(wù)淳玩。

屏幕快照 2017-02-25 上午12.36.16.png

目錄

LightweightUITalbeView 包含整個(gè)輕量級(jí)UITableview所需要的內(nèi)容直撤,可以直接copy到項(xiàng)目中使用; LightweightUITalbeViewDemo 用于演示LightweightUITalbeView庫(kù)的使用蜕着;

說(shuō)明

KCTableViewArrayDataSource和KCTableViewDelegate用于給UIViewController中的UITableView的dataSource和delegate瘦身谋竖,也是LightweightUITalbeView的核心,二者將數(shù)據(jù)源和代理方法從控制器中解放出來(lái),并提供了一些便捷方法用于快速配置數(shù)據(jù)蓖乘;
UITableView+KC 用于實(shí)現(xiàn)自動(dòng)行高擴(kuò)展處理锤悄,理論上來(lái)說(shuō)和KCTableViewArrayDataSource、KCTableViewDelegate可以分開使用驱敲,但是為了設(shè)置更加方便建議配合使用铁蹈;
KCTableViewArrayDataSourceWithCommitEditingStyle用于處理可編輯Cell,KCTableViewArrayDataSource會(huì)根據(jù)屬性設(shè)置動(dòng)態(tài)調(diào)用众眨,外界無(wú)需直接調(diào)用握牧;
UITableViewCell+KC是對(duì)于UITableViewCell的擴(kuò)展,僅用于輔助操作娩梨;
KCTableViewCell是對(duì)UITableViewCell的簡(jiǎn)單封裝沿腰,方便配置Cell背景和設(shè)置間距,一般用于frame控制行高的情況狈定,和當(dāng)前庫(kù)沒(méi)有直接聯(lián)系颂龙,僅用于輔助;
KCTableViewController是對(duì)于KCTableViewArrayDataSource纽什、KCTableViewDelegate措嵌、UITableView+KC使用的簡(jiǎn)單控制器封裝,用于輔助開發(fā)者快速創(chuàng)建使用LightweightUITalbeView的表格控制器芦缰;
UIView+KC是對(duì)UIView屬性的簡(jiǎn)單擴(kuò)展企巢,和當(dāng)前庫(kù)沒(méi)有直接聯(lián)系,僅用于輔助让蕾;
總之浪规,KCTableViewArrayDataSource、KCTableViewDelegate、UITableView+KC三個(gè)類是給UITableView瘦身的核心,理論上其他輔助類如果不需要均可以去掉(需要開發(fā)者簡(jiǎn)單修改使用的輔助方法疯暑,但是可行)。

示例

1. 控制器瘦身

借助于KCTableViewArrayDataSource和KCTableViewDelegate對(duì)象代理控制器視圖成為數(shù)據(jù)源和代理缸濒,避免冗余的數(shù)據(jù)源和代理方法,開發(fā)人員只需要關(guān)注屬配置和必要的代理實(shí)現(xiàn)粱腻,并且二者均使用block實(shí)現(xiàn)庇配,避免同一類方法分散到各處造成維護(hù)困擾。并且二者在命名方式上完全和原來(lái)的數(shù)據(jù)源方法栖疑、代理方法相對(duì)應(yīng)讨永,開發(fā)起來(lái)幾乎零學(xué)習(xí)成本。另外為了便于開發(fā)遇革,這里除了對(duì)應(yīng)方法的block還提供了很多可以簡(jiǎn)化開發(fā)人員的方法卿闹,例如對(duì)于"- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath "這個(gè)數(shù)據(jù)源方法揭糕,則除了提供對(duì)應(yīng)的“cellForRowAtIndexPathBlock”這個(gè)block之外,通常情況下如果只有一組數(shù)據(jù)锻霎、一種cell樣式還可以直接使用"cellBlock"來(lái)簡(jiǎn)化數(shù)據(jù)配置著角,這個(gè)方法除了提供cell對(duì)象參數(shù)還提供了與之對(duì)應(yīng)的數(shù)據(jù)項(xiàng)避免開發(fā)人員自己去數(shù)組中取出對(duì)應(yīng)的模型(更多配置可以參考代碼和具體的注釋說(shuō)明)。
如下示例中旋恼,由于在KCTableViewArrayDataSource中默認(rèn)實(shí)現(xiàn)了返回分組數(shù)和行數(shù)的實(shí)現(xiàn)吏口,如果僅僅包含一組數(shù)據(jù)可以不用實(shí)現(xiàn)分組數(shù)據(jù)源方法,而行數(shù)的實(shí)現(xiàn)KCTableViewArrayDataSource默認(rèn)會(huì)返回配置的數(shù)組的個(gè)數(shù)冰更,因此開發(fā)人員僅僅需要配置"cellForRowAtIndexPathBlock"來(lái)配置數(shù)據(jù)展示(事實(shí)上下面的代碼中直接使用了默認(rèn)的構(gòu)造方法來(lái)完成了這個(gè)block的配置产徊,代碼更加簡(jiǎn)化)。同樣的道理蜀细,KCTableViewDelegate則使用block來(lái)代理代理方法舟铜。

** 配置數(shù)據(jù)源 **

//數(shù)據(jù)源方法通過(guò)block實(shí)現(xiàn)
_dataSource = [[KCTableViewArrayDataSource alloc] initWithData:self.data
                 cellBlock:^(UITableViewCell *cell, NSString *dataItem, NSIndexPath *indexPath) {
                   cell.textLabel.text = dataItem;
                 }];
//更多數(shù)據(jù)源配置
//[_dataSource setNumberOfRowsInSectionBlock:^NSUInteger(NSArray * data, NSInteger section) {
//            
//}];

** 配置代理 **


//代理方法通過(guò)block實(shí)現(xiàn)
[_delegate setSelectRowAtIndexPathBlock:^(id cell, NSIndexPath *indexPath) {
    NSString *controllerName = [NSString stringWithFormat:@"KCAutoHeightTableViewController%ld",indexPath.row + 1];
    UIViewController *autoHeightController = [NSClassFromString(controllerName) new];
    [weakSelf.navigationController pushViewController:autoHeightController animated:YES];
}];
//更多代理配置
//[_delegate setHeightForRowAtIndexPathBlock:^CGFloat(NSIndexPath *indexPath) {
//            
//}];

2. 自動(dòng)計(jì)算Cell高度

從iOS 8開發(fā)人員才能利用"self-sizing cell"自動(dòng)計(jì)算行高,但是這種方式似乎并沒(méi)有iOS 7那么流暢奠衔,因?yàn)樗鼤?huì)多次計(jì)算Cell高度谆刨,效率似乎并沒(méi)有那么高。另外归斤,目前不支持iOS 7還是不太現(xiàn)實(shí)的痊夭,或者說(shuō)你還想要兼容更低版本。LightweightUITableView提供了一種更加通用和高效的解決方案脏里。使用UITableView+KC 會(huì)讓Cell行高計(jì)算更加方便(無(wú)論你是使用frame還是AutoLayout布局)她我,再配合上KCTableViewDelegate這種實(shí)現(xiàn)則更加簡(jiǎn)潔,使用是直接配置UITableView的autoCellHeight為YES即可(當(dāng)然建議配置estimatedRowHeight)膝宁。UITableView+KC內(nèi)部會(huì)自動(dòng)在空閑時(shí)間預(yù)計(jì)算Cell高度鸦难,并且自動(dòng)維護(hù)行高不會(huì)多次計(jì)算行高根吁。 在下面的實(shí)例中员淫,僅僅通過(guò)幾行代碼即實(shí)現(xiàn)了Cell行高的計(jì)算。

//如果使用KCTableViewDelegate只需要配置UITableView的autoCellHeight屬性為YES即可(當(dāng)然在定義Cell中需要實(shí)現(xiàn)height方法)
self.tableView.estimatedRowHeight = 300.0;
self.tableView.autoCellHeight = YES;
self.dataSource.cellClass = [KCCardTableViewCell1 class];
self.data = [[KCPersonService requestPersons] mutableCopy];
[self.dataSource setCellBlock:^(KCCardTableViewCell1 *cell, id dataItem, NSIndexPath *indexPath) {
    cell.person = dataItem;
}];
[self.delegate setWillDisplayCellBlock:^(UITableViewCell *cell, NSIndexPath *indexPath) {
    cell.seperatorPinToSupperviewMargins = YES;//分割線兩端對(duì)齊
}];

引自:
http://upload-images.jianshu.io/upload_images/1799927-5ae449a08dbb3dc9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末击敌,一起剝皮案震驚了整個(gè)濱河市介返,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沃斤,老刑警劉巖圣蝎,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衡瓶,居然都是意外死亡徘公,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門哮针,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)关面,“玉大人坦袍,你說(shuō)我怎么就攤上這事〉忍” “怎么了捂齐?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)缩抡。 經(jīng)常有香客問(wèn)我奠宜,道長(zhǎng),這世上最難降的妖魔是什么瞻想? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任压真,我火速辦了婚禮,結(jié)果婚禮上蘑险,老公的妹妹穿的比我還像新娘榴都。我一直安慰自己,他們只是感情好漠其,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布嘴高。 她就那樣靜靜地躺著,像睡著了一般和屎。 火紅的嫁衣襯著肌膚如雪拴驮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天柴信,我揣著相機(jī)與錄音套啤,去河邊找鬼。 笑死随常,一個(gè)胖子當(dāng)著我的面吹牛潜沦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绪氛,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼唆鸡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了枣察?” 一聲冷哼從身側(cè)響起争占,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎序目,沒(méi)想到半個(gè)月后臂痕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猿涨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年握童,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叛赚。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澡绩,死狀恐怖片效,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情英古,我是刑警寧澤淀衣,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站召调,受9級(jí)特大地震影響膨桥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唠叛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一只嚣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艺沼,春花似錦册舞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挽荡,卻和暖如春藐石,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背定拟。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工于微, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人青自。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓株依,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親延窜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恋腕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容