Github地址戳这里:DZNEmptyDataSet
在开发中经常会遇到Tableview列表数据为空的情况,这个时候如果自己处理无数据页面的各种逻辑的话,通常会比较复杂。还好早已经有大神封装好框架,我们直接拿来用即可
导入头文件
#import "UIScrollView+EmptyDataSet.h"
设置代理
mainTable.emptyDataSetDelegate = self;
mainTable.emptyDataSetSource = self;
实现dataSource代理方法,(例如我的无数据页面只有一个图片和一行文字)
- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
// 这一步判断是为了第一次加载的时候不显示无数据图,再调用请求数据的方法之后将hasLoad设置为YES
if (!_hasLoad) {
return nil;
}
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"暂无数据" attributes:@{NSForegroundColorAttributeName : RGBColor(0x88888e),NSFontAttributeName : [UIFont systemFontOfSize:14 * kWIDTHSCALE]}];
return str;
}
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView {
// 这一步判断是为了第一次加载的时候不显示无数据图,再调用请求数据的方法之后将hasLoad设置为YES
if (!_hasLoad) {
return nil;
}
return QLNamedImage(@"notData");
}
其它dataSource代理方法
//
- (nullable NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
//
- (nullable UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
//
- (nullable CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView;
//
- (nullable NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
//
- (nullable UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
//
- (nullable UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
//
- (nullable UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
// !!! 重点 自定义UI的时候使用这个
- (nullable UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
//
- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
//
- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
实现delegate代理方法
// 点击无数据视图的时候 开始刷新数据
- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view {
[self.mainTable.mj_header beginRefreshing];
}
// 如果不实现此方法的话,无数据时下拉刷新不可用
- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView {
return YES;
}
其它delegate方法 根据需要选择实现
// 视图是否动画渐入效果 默认为YES
- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
//
- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
//
- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
// 是否允许点击 默认YES
- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
// 是否允许滑动 默认NO
- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
//
- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
// 点击视图之后回调 (已废弃)
- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
// 点击按钮之后回调 (已废弃)
- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
// 点击视图之后回调
- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
// 点击按钮之后回调
- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
// 即将出现
- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
// 已经出现
- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
// 即将消失
- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
// 已经消失
- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;