iOS开发——无网占位图的实现
https://www.jianshu.com/p/d537393fe247
https://github.com/wyzxc/CQPlaceholderView
https://github.com/wyzxc/TableViewNoContentView
先来看一下实际效果:

为什么要使用无网占位图?
为了更好地用户体验。难道没网的时候展示一个空白模板?当然,无网占位图也是一个APP最基本的功能只一。
原理简介:
在viewWillAppear
时判断是否有网,如果没网,展示无网占位图。点击无网占位图上的重新查看按钮,判断是否有网,如果没网,toast提示。如果有网,移除无网占位图,重新加载数据。
详细讲解:
- 首先按照设计师的UI图封装一个无网占位图view:
CQNoNetworkView
,在构造方法里完成
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
// UI搭建
[self setUpUI];
}
return self;
}
/** UI搭建 */
- (void)setUpUI{
self.backgroundColor = [UIColor whiteColor];
// 404图片放中间
UIImageView *noNetworkImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 125, 125)];
noNetworkImageView.center = CGPointMake(self.width / 2, self.height / 2);
[self addSubview:noNetworkImageView];
noNetworkImageView.image = [UIImage imageNamed:@"404notfound"];
// 重新查看按钮
UIButton *checkButton = [[UIButton alloc]initWithFrame:CGRectMake(0, noNetworkImageView.maxY + 24, 115, 30)];
checkButton.centerX = self.width / 2;
[self addSubview:checkButton];
[checkButton.titleLabel setFont:[UIFont systemFontOfSize:15]];
checkButton.backgroundColor = [UIColor colorWithRed:0.00 green:0.76 blue:0.66 alpha:1.00];
[checkButton setTitle:@"重新查看" forState:UIControlStateNormal];
[checkButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[checkButton addTarget:self action:@selector(checkNetworkButtonClicked) forControlEvents:UIControlEventTouchUpInside];
// 图片上面的两个label
UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
label1.text = @"刷新一下返回店铺!";
label1.font = [UIFont systemFontOfSize:14];
label1.textColor = [UIColor colorWithRed:0.00 green:0.77 blue:0.68 alpha:1.00];
label1.backgroundColor = [UIColor clearColor];
label1.textAlignment = NSTextAlignmentCenter;
[label1 sizeToFit];
label1.centerX = self.width / 2;
label1.maxY = noNetworkImageView.y - 21;
[self addSubview:label1];
UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 15)];
label2.text = @"您似乎迷路了";
label2.font = [UIFont systemFontOfSize:19];
label2.textColor = [UIColor colorWithRed:0.00 green:0.77 blue:0.67 alpha:1.00];
label2.backgroundColor = [UIColor clearColor];
label2.textAlignment = NSTextAlignmentCenter;
[label2 sizeToFit];
label2.centerX = self.width / 2;
label2.maxY = label1.y - 12;
[self addSubview:label2];
}
- 处理“重新查看”按钮的逻辑,基本思路是:点击此按钮时,判断是否有网,如果仍旧没网,弹出toast提示用户;如果有网,移除此view,并且,让代理方执行相应代理方法,比如说,重新加载数据。
/** 重新查看按钮点击 */
- (void)checkNetworkButtonClicked{
if ([DateUtil isNetWorkRunning]) {
// 如果有网,view消失,并且让代理方执行代理方法
for (CQNoNetworkView *view in [self getCurrentViewController].view.subviews) {
if ([view isMemberOfClass:[CQNoNetworkView class]]) {
[view removeFromSuperview];
}
}
// 重新加载数据
if ([self.delegate respondsToSelector:@selector(reloadData)]) {
[self.delegate reloadData];
}
}else{
// 如果没网,toast提示
[CQHud showToastWithMessage:@"请检查你的网络连接"];
}
}
- 确定代理方法(点击“重新加载”按钮时,代理方执行的方法),我的是重新加载数据。
@protocol CheckNetworkDelegate <NSObject>
@optional
/** 重新加载数据 */
- (void)reloadData;
@end
/** 无网络时展示的view */
@interface CQNoNetworkView : UIView
@property (nonatomic,weak) id<CheckNetworkDelegate> delegate;
@end
- 确定代理方。代理方就是执行“重新加载数据”的对象。由于每个viewController都需要在无网时展示无网占位图,所以代理方可以设置为项目的
BaseViewController
(不要告诉我,你的项目里没有基类iOS开发——无网占位图的实现的更多相关文章
- iOS 开发仿网易云音乐歌词海报
使用网易云音乐也是一个巧合,我之前一直使用QQ音乐听歌,前几天下 app 手机内存告急.于是就把QQ音乐给卸载掉了,正好晚上朋友圈里有一个朋友用网易云音乐分享了一首歌曲,于是我也就尝试下载了网易云音乐 ...
- iOS开发无第三方控件的援助达到的效果侧边栏
最近的研究iOS程序侧边栏.渐渐的发现iOS该方案还开始采取风侧边栏格该,QQ,今日头条,Path(Path运营商最早的侧边栏app该,效果说成是Path效果),所以就研究了下. 然后发现Git Hu ...
- 零行代码为App添加异常加载占位图
前文提要 近期准备重构项目,需要重写一些通用模块,正巧需要设置App异常加载占位图的问题,心血来潮设想是否可以零行代码解决此问题,特在此分享实现思路. 思路分享 对于App占位图,通常需要考虑的控件有 ...
- 零行代码为 App 添加异常加载占位图
前文提要 近期准备重构项目,需要重写一些通用模块,正巧需要设置App异常加载占位图的问题,心血来潮设想是否可以零行代码解决此问题,特在此分享实现思路. 思路分享 对于App占位图,通常需要考虑的控件有 ...
- iOS开发造轮子 | 通用占位图
https://www.jianshu.com/p/beca3ac24031 实际运用场景: 没网时的提示view,tableView或collectionView没内容时的展示view,以及其它特殊 ...
- 自学 iOS 开发的一些经验 - 转自无网不剩的博客
不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...
- [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)
2018年01月03日阅读 2472 [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想) LYEmptyView 此框架是本人在5,6个月前,公司启动新项目的时候, ...
- iOS开发——UI进阶篇(三)自定义不等高cell,如何拿到cell的行高,自动计算cell高度,(有配图,无配图)微博案例
一.纯代码自定义不等高cell 废话不多说,直接来看下面这个例子先来看下微博的最终效果 首先创建一个继承UITableViewController的控制器@interface ViewControll ...
- iOS开发——app审核指导方针(官网)
iOS 开发后上传到App Store审核的指导方针 ——苹果官网介绍地址 https://developer.apple.com/app-store/review/guidelines/
随机推荐
- Ubuntu下 MySQL的“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)”
今天闲来无事,在Ubuntu上掏鼓一下mysql.但尴尬的是,当我输入mysql -u root -p的时候,抛出了一个错误:ERROR 1045 (28000): Access denied for ...
- 第七章 LED将为我闪烁:控制发光二级管
LED驱动开发实验 如图所示,LED1-LED2 分别与GPC0_3.GPC0_4 相连,通过GPC0_3.GPC0_4 引脚的高低电平来控制三极管的导通性,从而控制LED 的亮灭. 根据三极管的特性 ...
- LeetCode算法题-Pascal's Triangle II(Java实现)
这是悦乐书的第171次更新,第173篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第30题(顺位题号是119).给定非负索引k,其中k≤33,返回Pascal三角形的第k ...
- vue-cli脚手架搭建的项目怎么去除eslint验证
修改webpack.base.conf.js这个基础配置文件了.具体修改方法如下: module: { rules: [ ...(config.dev.useEslint ? [createLinti ...
- (转)Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
http://www.ityouknow.com/springboot/2018/05/03/spring-boot-commandLineRunner.html 在我们实际工作中,总会遇到这样需求, ...
- Linux之系统优化
查看系统版本 [root@luffy- /]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@luffy- /]# uname -m ...
- VS2015中配置Eigen
Eigen非常方便矩阵操作,当然它的功能不止如此.矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维高斯拟合求取光斑中心时使用Eigen提供的矩阵算法,差不多十来行代码即可实现. 1)下载Eig ...
- ElasticSearch(站内搜索) 转发 https://www.cnblogs.com/xibei666/p/5929970.html
简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合.Elasticse ...
- fastJson 之 JSONPath使用
1. JSONPath介绍 官网地址: https://github.com/alibaba/fastjson/wiki/JSONPath fastjson 1.2.0之后的版本支持JSONPath. ...
- shell笔记-常用
shell提取文件名: http://blog.csdn.net/u011544778/article/details/50773053 一.使用${} 1.${var##*/}该命令的作用是去掉变量 ...
- iOS 开发仿网易云音乐歌词海报