DZNEmptyDataSet是外国友人写的开源项目,github地址(具体的使用以及Demo,点击进入github主页),简单介绍下DZNEmptyDataSet的使用方法。

对于iOS开发者来说,UITableView是在开发过程中使用比较多的一个控件。如果UITableView表视图没有数据,页面一片空白,不是一个很好的用户体验。我们都希望在数据源为空的时候,给用户一些相应的提示,提高交互效果。

DZNEmptyDataSet就如同福音,适用于每一个iOS项目,只要遵DZNEmptyDataSetSource、 DZNEmptyDataSetDelegate这两个协议,在UITableView和UICollectionView中实现对应的代理方法就OK啦。

DZNEmptyDataSet效果图

一、函数调用

1.1 数据源方法

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
* 返回占位图图片
*/
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView {
[UIImage imageNamed:@""];
}
* 返回标题文字
*/
- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
NSString *text = @"No Application Found";
return [[NSAttributedString alloc] initWithString:text attributes:nil];
}
* 返回详情文字
*/
- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView {
UISearchBar *searchBar = self.searchDisplayController.searchBar;
NSString *text = [NSString stringWithFormat:@"There are no empty dataset examples for "%@".", searchBar.text];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text attributes:nil];
[attributedString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:17.0] range:[attributedString.string rangeOfString:searchBar.text]];
return attributedString;
}
* 返回文字按钮
*/
- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state {
NSString *text = @"Search on the App Store";
UIFont *font = [UIFont systemFontOfSize:16.0];
UIColor *textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"007aff" : @"c6def9"];
NSMutableDictionary *attributes = [NSMutableDictionary new];
[attributes setObject:font forKey:NSFontAttributeName];
[attributes setObject:textColor forKey:NSForegroundColorAttributeName];
return [[NSAttributedString alloc] initWithString:text attributes:attributes];
}
* 返回图片按钮(如果设置了此方法,buttonTitleForEmptyDataSet: ,返回文字按钮方法就会失效
*/
- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state {
return [UIImage imageNamed:@""];
}
* 自定义背景颜色
*/
- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView {
return [UIColor whiteColor];
}
* 自定义视图 (关键方法,可以做一些自定义占位视图)
*/
//- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView {
//
//}
* 设置垂直或者水平方向的偏移量,推荐使用verticalOffsetForEmptyDataSet这个方法
*
* @return 返回对应的偏移量(默认都为0)
*/
- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView {
return CGPointMake(0, -64.0);
}
* 设置垂直方向的偏移量 (推荐使用)
*/
- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView {
return -64.0大专栏  DZNEmptyDataSet的使用an>;
}

1.2 代理方法

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
31
32
33
34
35
36
37
38
39
40
41
* 数据源为空时是否渲染和显示 (默认为 YES)
*/
- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView {
return YES;
}
/**
* 是否允许点击 (默认为 YES)
*/
- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView {
return YES;
}
/**
* 是否允许滚动 (默认为 NO)
*/
- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView {
return YES;
}
/**
* 处理空白区域的点击事件
*/
- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view {
NSLog(@"%s",__FUNCTION__);
}
/**
* 处理按钮的点击事件
*/
- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button {
UISearchBar *searchBar = self.searchDisplayController.searchBar;
NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.com/apps/%@", searchBar.text]];
if ([[UIApplication sharedApplication] canOpenURL:URL]) {
[[UIApplication sharedApplication] openURL:URL];
}
}

1.3 ReloadData

当数据源发生变化是执行:

1
[self.tableView reloadData];

或者

1
[self.collectionView reloadData];

二、项目中使用

2.1 实际使用的方法

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
- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView {
self.mTableView.contentOffset = CGPointZero;
}
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView {
return [UIImage imageNamed:@"icon_can_not_find_the_network"];
}
- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state {
NSString *text = @"网络不给力,请点击重试哦~";
UIFont *font = [UIFont systemFontOfSize:15.0];
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:text];
[attStr addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, text.length)];
[attStr addAttribute:NSForegroundColorAttributeName value:kTextLightColor range:NSMakeRange(0, text.length)];
[attStr addAttribute:NSForegroundColorAttributeName value:kThemeColor range:NSMakeRange(7, 4)];
return attStr;
}
- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button {
// 点击重试
}
- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView {
return -70.0f;
}

2.2 效果图

2.3 遇到的问题

在使用过程中发现有时候出现无数据或者无网络的情况,占位图的位置并不是在屏幕设定的位置,会出现偏移的现象。

解决思路:

在emptyDataSetWillAppear方法中,将tableView或者scrollerView的contentOffset设为 CGPointZero

1
2
3
- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView {
self.mTableView.contentOffset = CGPointZero;
}

DZNEmptyDataSet的使用的更多相关文章

  1. DZNEmptyDataSet,优秀的空白页或者出错页封装

    简介 项目主页:https://github.com/dzenbot/DZNEmptyDataSet 提示:主要用于UITableView和UICollectionView,也可以用于UIScroll ...

  2. DZNEmptyDataSet框架简介

    给大家推荐一个设置页面加载失败时显示加载失败等的框架. 下载地址:DZNEmptyDataSet https://github.com/dzenbot/DZNEmptyDataSet 上效果首先在你的 ...

  3. DZNEmptyDataSet 使用

    gitHub地址:https://github.com/dzenbot/DZNEmptyDataSet 效果图: 代码: #import "UIScrollView+EmptyDataSet ...

  4. DZNEmptyDataSet——空白数据集显示框架

    GitHub地址:DZNEmptyDataSet DZNEmptyDataSet DZNEmptyDataSet 是基于 UITableView/UICollectionView 的范畴/扩展(cat ...

  5. DZNEmptyDataSet框架阅读

      前段时间使用公司封装的空白页占位视图工具,工具是对DZNEmptyDataSet框架的封装.这个框架以前在许多项目也都用过,却没有认真阅读过源码,真的很遗憾.这两天趁五一放假有空,将DZNEmpt ...

  6. iOS比较常用的第三方及实例(不断更新中)

    把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新: 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com ...

  7. IOS比较常用的第三方组件及应用源代码(持续更新中)

    把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新~ 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com ...

  8. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  9. iOS 常用第三方类库、完整APP示例

    一.第三方类库 1:基于响应式编程思想的oc地址:https://github.com/ReactiveCocoa/ReactiveCocoa2:hud提示框地址:https://github.com ...

随机推荐

  1. SpringBoot 2.2.2集成ElasticSearch 7.5.1

    前言:现在公司有一个项目要用到检索功能,检索上面现在最常用的是Solr/ES,最后经过对比选择了ElasticSearch开源组件包,因为这个是公司的一个产品项目,技术版本当然要用最新的啦,最后完全确 ...

  2. Anaconda环境安装

    Anaconda环境安装 一.Anaconda Anaconda是Python的一个开源的发行版本,里面包含了很多科学计算相关的包,它和Python的关系就像linux系统中centos和Ubuntu ...

  3. [Algo] 292. String Abbreviation Matching

    Word “book” can be abbreviated to 4, b3, b2k, etc. Given a string and an abbreviation, return if the ...

  4. PAT甲级——1035 Password (20分)

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  5. 898B. Proper Nutrition#买啤酒问题(枚举&取余)

    题目出处:http://codeforces.com/problemset/problem/898/B 题目大意:为一个整数能否由另外两个整数个整数合成 #include<iostream> ...

  6. 爱心Java for循环实现

    public class x { public static void main(String[] args) { for (int i = 0, k = 0; i < 14; i++) { i ...

  7. Java程序员常用Linux性能分析命令

    性能分析 vmstat 虚拟内存统计 用法 Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive ...

  8. Wanna go back home

    题目描述 Snuke lives on an infinite two-dimensional plane. He is going on an N-day trip. At the beginnin ...

  9. MySQL数据库优化、设计与高级应用

    MySQL数据库优化主要涉及两个方面,一方面是对SQL语句优化,另一方面是对数据库服务器和数据库配置的优化. 数据库优化 SQL语句优化 为了更好的看到SQL语句执行效率的差异,建议创建几个结构复杂的 ...

  10. xpath-helper使用

    xpath-helper提取不到frame元素时: https://blog.csdn.net/skywinne/article/details/83832126