下拉刷新使我们经常使用的框架, 其中MJRefresh
也是我们比较常用的. 但是列表展示很多情况会出现没有数据的尴尬, 比如服务器返回数据为空, 网络状态不好请求超时等,我们平时处理空数据的时候用的最多的框架就是DZNEmptyDataSet
.笔者探索将这两个框架结合在一起,并通过给UIScrollView添加分类的方式,给常用的列表控件 UITableView, UICollectionview, UIScrollView
,添加了下拉刷新和自动处理空数据的功能.
依赖框架
-
DZNEmptyDataSet
-
MJRefresh
使用方式
访问项目地址,将项目下载到本地, 然后将 HLLEmpeyDataSource
文件夹拖入到自己的项目中, 在使用的地方导入头文件 #import "UIScrollView+HLLScrollView.h"
.
具体使用方式可以参考Demo, Demo中分别对UITableView, UICollectionview, UIScrollView
的使用方式进行了演示;
下面就UITableView的使用方式进行说明, 其他列表控件的使用方式基本相同:
- 初始化tableview, 可以使用代码也可以使用SB或者XIB;
- 调用
[_tableView hll_setUp]
进行初始化; -
根据实际需求配置,比如是否开启下拉刷新, 是否开启上拉加载更多等等, 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//开启上拉加载更多 _tableView.shouldPullLoadMore = true; //开启下拉刷星 _tableView.shouldPullRefresh = true; //isEmpty属性决定了列表为空时是否显示空列表提示,初始时可以赋值为true,显示没有数据(根据实际情况配置) _tableView.isEmpty = true; //没有数据的原因, 这是一个枚举,使用时开发者可以根据实际情况自定义 _tableView.noDataType = HLLNodataTypeNoNetworking; //空数据视图的背景颜色 _tableView.emptyBackgroundColor = UIColor.lightGrayColor; //下拉加载更多的回调 _tableView.loadNewDataBlock = ^(void (^ _Nonnull completion)(void)) { sleep(1); //告诉框架已经完成数据请求,框架会自动关闭刷新 completion(); //此句很重要, 如果数据为空那么赋值为true, 如果数据不为空赋值为false; weakSelf.tableView.isEmpty = false; weakSelf.data = @[@"one",@"one",@"one",@"one",@"one"]; [weakSelf.tableView reloadData]; }; //上拉加载更多的回调 _tableView.loadMoreDataBlock = ^(void (^ _Nonnull completion)(BOOL)) { sleep(1); //此句很重要, 如果数据为空那么赋值为true, 如果数据不为空赋值为false; weakSelf.tableView.isEmpty = false; weakSelf.data = @[@"one",@"one",@"one",@"one",@"one",@"one",@"one",@"one",@"one",@"one",@"one",@"one",@"one"]; //告诉框架加载更多已经完成,参数传递一个bool值, 告诉框架是否为最后一页 completion(weakSelf.data.count == 13); [weakSelf.tableView reloadData]; };
主要属性介绍
1 |
|