ios UITableView封装之下拉-上提-图片异步加载
做过移动端开发的人都知道,列表控件是最常用的控件之一。iOS里的列表控件是UITableView,其实Apple的开发人员对于UITableView的设计已经够好的了(简单易用,扩展性非常强等等)。
但对于展示逻辑单一的移动端系统软件,你还是能感觉到有些繁琐(或许是程序员天生就有些懒惰的毛病吧)。
来看看它到底繁琐在哪儿了。首先,它的使用频率太高了;第二,它通常不是只呈现一下数据就完事了,一般都会跟随下拉刷新、上提加载更多功能,当然通常还要跟网络下载数据、图片打交道;第三,MVC模式是ios开发的惯用模式,随之而来的是一大堆协议的实现(无论你是再写一次也好,拷贝也罢,反正做这些工作都让人觉得索然无味)。
冲着这些,今天就把UITableView常见的使用模式封装了一下。具体做了以下几件事:
1、 内嵌了下拉刷新(EGORefreshTableHeaderView)、上提加载更多(LoadMoreTableFooterView)
2、 内置实现了UITableViewDataSource、UITableViewDelegate这两个通常必须实现的协议,对于自实现的逻辑以Block的形式对客户代码开放
3、 内置实现了1中提到的两个组件的回调协议,同上,自实现的逻辑以Block的形式对外开放
4、 内置实现了EGORefreshTableHeaderView、LoadMoreTableFooterView与UITableView交互必须实现的UIScrollViewDelegate协议
5、 内置实现了异步图片下载(可选)
代码中包含了一个示例程序以及三个必备组件:
1、 EGORefreshTableHeaderView
2、 LoadMoreTableFooterView(修改版,原版不能适应任何尺寸的高度)
3、 Apple官方提供的异步下载UITableView中的图片的示例组件(IconDownLoader),这个只适用于下载类似于社交网络中的用户头像,不建议使用它来下载那些大图片,因为它甚至都没有缓存(如果图片很大,推荐使用SDImage)
代码解读
它已经内置实现了这些协议,所以在你使用它的时候,无需设置和实现。

对于不断变化的业务逻辑,这里提供了所有需要实现的block:

它们以属性的形式对外公开:

对于上提加载更多、下拉刷新、图片异步加载这几个功能都是可选的,它们以组件的形式存在。比如,在实例化该controller的时候你就可以设置上提和下拉是否可用。而对于图片下载,你只要不实现其相应得block,它也不会对你造成额外的负担。



ELTableViewController 的使用
创建一个新的controller继承自:ELTableViewController;
override父类的initBlocks方法:


然后在ViewDidLoad中调用:

最后,你在实例化该controller的时候,可以指定是否使用上提和下拉


上图为2017年最新的视频教程资料,搜索2352149755加我好友私聊我上传视频教程,有什么不懂的也可以来私聊问我。
不定时更新中。
如果你能明白这些视频资料的好差,那么你也算是入行了,底层和中高层就是这一步之差。