UITableVew代碼量的優(yōu)化
大小:0.6 MB 人氣: 2017-10-12 需要積分:1
標簽:
這篇文章為一些剛入行的新手貢獻出來。本人不是大牛,只是有兩年多工作經驗而已,還忘各位大神指點一二,輕點虐。最近有不少的新手總是會加QQ問我一些問題,提供思路后解決不了的問題我會直接讓他把項目發(fā)過來幫他們修改。然后本人見識了各種風生水起的代碼。比如說在Controller中寫上不計其數(shù)的代碼,再比如說在TableView的協(xié)議方法中協(xié)上數(shù)百行的代碼。更有甚者,每個頁面只有一個Controller類(每個頁面1000行以上),這么耿直的代碼我看完之后差點失去自信力,努努力我能替你去上班。
在幫他們看代碼的時候,也做了不少的總結。所以才決定為剛入門的同學寫一篇這關于UITableView在UIViewControler的代碼優(yōu)化的文章。
UITabelView主要是針對于Datasource數(shù)據(jù)源協(xié)議方法中會存在著大量的代碼:
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
原因一:在動態(tài)的tableview中會有很多的也許需要在這個方法中來處理。比如說美團網(wǎng)的自定義cell中有好評的的等級、有圖片、有標題、還有經緯度來計算距離等等,這些業(yè)務都會增加代碼量。
原因二:在靜態(tài)的tableview中會有很多的分區(qū),因此也會有很多人寫上很多的分支語句。然后再return各種自定義的cell。比如一般APP中的個人中心頁面。可能會有很多的section。
總結了這兩點的原因,那么接下來分享一下我是如何來優(yōu)化UITableView的協(xié)議方法中大量代碼的,我又是如何將這一堆代碼從UIViewController中剝離出來的。可能我的代碼不太符合MVC或者MVVM架構模式的標準。但是我覺得每個人做項目的架構都是基于這些經典的架構基礎上去做出調整的,大家應該都不會做的那么生硬吧,每人的理解都會有不一樣的地方。所以我覺得我寫的應該也不為過吧?(有什么說的不對的地方,還希望各位牛人給出指點,我也慢慢的改進。)
下面我就拿一個簡單的頁面來說明一下如何將UIViewController中的UITableView協(xié)議方法進行優(yōu)化。
拿下圖也頁面來做個例子吧。

看圖片我們可以分析出有三個section。
第一個section中有兩行,第二個和第三個section分別有一樣。
下面就開始構建這個頁面。代碼上實現(xiàn)很簡單,重點是優(yōu)化UITableView的協(xié)議方法,優(yōu)化UITableView的協(xié)議方法,優(yōu)化UITableView的協(xié)議方法。(重要的事情說三遍)。

上圖為Find模塊的結構,重點內容使用FindCellModel這個類。
將cellForRowAtIndexPath:這個方法中的大量內容剝離到FindCellModel這個類中。
貼上代碼
FindCellModel中添加如下方法
-(NSInteger)findnumberOfRowsInSection:(NSInteger)section; -(UITableViewCell*)findtableView:(UITableView*)tableView findcellForRowAtIndexPath:(NSIndexPath*)indexPath;
FindViewController中的tableview協(xié)議方法如下
-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView { return3; } -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { FindCellModel *cellModel = [[FindCellModel alloc]init]; return[cellModel findnumberOfRowsInSection:section]; } -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { FindCellModel *cellModel = [[FindCellModel alloc]init]; return[cellModel findtableView:tableView findcellForRowAtIndexPath:indexPath]; }
這樣來寫是不是讓你的UIViewController更加的精簡。通讀性也更高了。
對tableview中的業(yè)務我們可以到FindCellModel中去查看,就不用在數(shù)千行的UIViewController中再去尋找了。
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
