ios UITableView封裝之下拉-上提-圖片異步加載

做過(guò)移動(dòng)端開發(fā)的人都知道,列表控件是最常用的控件之一。iOS里的列表控件是UITableView,其實(shí)Apple的開發(fā)人員對(duì)于UITableView的設(shè)計(jì)已經(jīng)夠好的了(簡(jiǎn)單易用,擴(kuò)展性非常強(qiáng)等等)。

但對(duì)于展示邏輯單一的移動(dòng)端系統(tǒng)軟件,你還是能感覺(jué)到有些繁瑣(或許是程序員天生就有些懶惰的毛病吧)。

來(lái)看看它到底繁瑣在哪兒了。首先,它的使用頻率太高了;第二,它通常不是只呈現(xiàn)一下數(shù)據(jù)就完事了,一般都會(huì)跟隨下拉刷新、上提加載更多功能,當(dāng)然通常還要跟網(wǎng)絡(luò)下載數(shù)據(jù)、圖片打交道;第三,MVC模式是ios開發(fā)的慣用模式,隨之而來(lái)的是一大堆協(xié)議的實(shí)現(xiàn)(無(wú)論你是再寫一次也好,拷貝也罷,反正做這些工作都讓人覺(jué)得索然無(wú)味)。

沖著這些,今天就把UITableView常見的使用模式封裝了一下。具體做了以下幾件事:

1、? 內(nèi)嵌了下拉刷新(EGORefreshTableHeaderView)、上提加載更多(LoadMoreTableFooterView)

2、? 內(nèi)置實(shí)現(xiàn)了UITableViewDataSource、UITableViewDelegate這兩個(gè)通常必須實(shí)現(xiàn)的協(xié)議,對(duì)于自實(shí)現(xiàn)的邏輯以Block的形式對(duì)客戶代碼開放

3、? 內(nèi)置實(shí)現(xiàn)了1中提到的兩個(gè)組件的回調(diào)協(xié)議,同上,自實(shí)現(xiàn)的邏輯以Block的形式對(duì)外開放

4、? 內(nèi)置實(shí)現(xiàn)了EGORefreshTableHeaderView、LoadMoreTableFooterView與UITableView交互必須實(shí)現(xiàn)的UIScrollViewDelegate協(xié)議

5、? 內(nèi)置實(shí)現(xiàn)了異步圖片下載(可選)

代碼中包含了一個(gè)示例程序以及三個(gè)必備組件:

1、? EGORefreshTableHeaderView

2、? LoadMoreTableFooterView(修改版,原版不能適應(yīng)任何尺寸的高度)

3、? Apple官方提供的異步下載UITableView中的圖片的示例組件(IconDownLoader),這個(gè)只適用于下載類似于社交網(wǎng)絡(luò)中的用戶頭像,不建議使用它來(lái)下載那些大圖片,因?yàn)樗踔炼紱](méi)有緩存(如果圖片很大,推薦使用SDImage)

代碼解讀

它已經(jīng)內(nèi)置實(shí)現(xiàn)了這些協(xié)議,所以在你使用它的時(shí)候,無(wú)需設(shè)置和實(shí)現(xiàn)。


對(duì)于不斷變化的業(yè)務(wù)邏輯,這里提供了所有需要實(shí)現(xiàn)的block:


它們以屬性的形式對(duì)外公開:


對(duì)于上提加載更多、下拉刷新、圖片異步加載這幾個(gè)功能都是可選的,它們以組件的形式存在。比如,在實(shí)例化該controller的時(shí)候你就可以設(shè)置上提和下拉是否可用。而對(duì)于圖片下載,你只要不實(shí)現(xiàn)其相應(yīng)得block,它也不會(huì)對(duì)你造成額外的負(fù)擔(dān)。




ELTableViewController 的使用

創(chuàng)建一個(gè)新的controller繼承自:ELTableViewController;

override父類的initBlocks方法:



然后在ViewDidLoad中調(diào)用:


最后,你在實(shí)例化該controller的時(shí)候,可以指定是否使用上提和下拉



上圖為2017年最新的視頻教程資料,搜索2352149755加我好友私聊我上傳視頻教程,有什么不懂的也可以來(lái)私聊問(wèn)我。

不定時(shí)更新中。

如果你能明白這些視頻資料的好差,那么你也算是入行了,底層和中高層就是這一步之差。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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