在我们平常我们用的app当中,当你在信号不好网络错误的时候,一般都会有个提示:“网络错误请点击重试~” 的话术,或者说当你浏览某一页的时候,没有数据,也会提示:“暂无数据,请搞点动静” 之类的话术。 下面写了一个空白页(配合masonry),直接把分类拖进去用可以了

先看效果图:

1.网络错误

2.无数据

上菜:

建一个UIView的分类 利用runtime动态添加属性的方法实现空白视图效果

  1. @class CDMNetErrorPageView , CDMBlankPageView;
  2.  
  3. @interface UIView (CDMEmpty)
  4.  
  5. //CDMNetErrorPageView
  6. @property (nonatomic,strong) CDMNetErrorPageView * netErrorPageView;
  7. - (void)configReloadAction:(void(^)())block;
  8. - (void)showNetErrorPageView;
  9. - (void)hideNetErrorPageView;
  10.  
  11. //CDMBlankPageView
  12. @property (nonatomic,strong) CDMBlankPageView* blankPageView;
  13. - (void)showBlankPageView;
  14. - (void)hideBlankPageView;
  15.  
  16. @end
  17.  
  18. #pragma mark --- CDMNetErrorPageView
  19. @interface CDMNetErrorPageView : UIView
  20. @property (nonatomic,copy) void(^didClickReloadBlock)();
  21. @end
  22.  
  23. #pragma mark --- CDMBlankPageView
  24. @interface CDMBlankPageView : UIView
  25.  
  26. @end

实现, 核心代码:

  1. @interface UIView ()
  2.  
  3. @property (nonatomic,copy) void(^reloadAction)();
  4.  
  5. @end
  6.  
  7. @implementation UIView (CDMEmpty)
  8.  
  9. - (void)setReloadAction:(void (^)())reloadAction{
  10. objc_setAssociatedObject(self, @selector(reloadAction), reloadAction, OBJC_ASSOCIATION_COPY);
  11. }
  12. - (void (^)())reloadAction{
  13. return objc_getAssociatedObject(self, _cmd);
  14. }
  15.  
  16. //CDMNetErrorPageView
  17. - (void)setNetErrorPageView:(CDMNetErrorPageView *)netErrorPageView{
  18. [self willChangeValueForKey:NSStringFromSelector(@selector(netErrorPageView))];
  19. objc_setAssociatedObject(self, @selector(netErrorPageView), netErrorPageView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  20. [self didChangeValueForKey:NSStringFromSelector(@selector(netErrorPageView))];
  21. }
  22. - (CDMNetErrorPageView *)netErrorPageView{
  23. return objc_getAssociatedObject(self, _cmd);
  24. }
  25.  
  26. - (void)configReloadAction:(void (^)())block{
  27. self.reloadAction = block;
  28. if (self.netErrorPageView && self.reloadAction) {
  29. self.netErrorPageView.didClickReloadBlock = self.reloadAction;
  30. }
  31. }
  32.  
  33. - (void)showNetErrorPageView{
  34.  
  35. if (!self.netErrorPageView) {
  36. self.netErrorPageView = [[CDMNetErrorPageView alloc]initWithFrame:self.bounds];
  37. if (self.reloadAction) {
  38. self.netErrorPageView.didClickReloadBlock = self.reloadAction;
  39. }
  40. }
  41. [self addSubview:self.netErrorPageView];
  42. [self bringSubviewToFront:self.netErrorPageView];
  43. }
  44. - (void)hideNetErrorPageView{
  45. if (self.netErrorPageView) {
  46. [self.netErrorPageView removeFromSuperview];
  47. self.netErrorPageView = nil;
  48. }
  49. }
  50.  
  51. //CDMBlankPageView
  52. - (void)setBlankPageView:(CDMBlankPageView *)blankPageView{
  53. [self willChangeValueForKey:NSStringFromSelector(@selector(blankPageView))];
  54. objc_setAssociatedObject(self, @selector(blankPageView), blankPageView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  55.  
  56. [self didChangeValueForKey:NSStringFromSelector(@selector(blankPageView))];
  57. }
  58. - (CDMBlankPageView *)blankPageView{
  59. return objc_getAssociatedObject(self, _cmd);
  60. }
  61. - (void)showBlankPageView{
  62.  
  63. if (!self.blankPageView) {
  64. self.blankPageView = [[CDMBlankPageView alloc]initWithFrame:self.bounds];
  65. }
  66. [self addSubview:self.blankPageView];
  67. [self bringSubviewToFront:self.blankPageView];
  68. }
  69. - (void)hideBlankPageView{
  70. if (self.blankPageView) {
  71. [self.blankPageView removeFromSuperview];
  72. self.blankPageView = nil;
  73. }
  74. }
  75.  
  76. @end

调用:

  1. // 网络错误时,展示错误页
  2. [self.view showNetErrorPageView];
  3. [self.view configReloadAction:^{
  4.  
  5. NSLog(@"刷新");
  6. }];
  7. //隐藏网络错误页
  8. [self.view hideNetErrorPageView];
  9.  
  10. ---------------------------------------------------------
  11.  
  12. //无数据展示空白页
  13. [self.view showBlankPageView];
  14. //无数据隐藏空白页
  15. [self.view hideBlankPageView];

Demo地址:git@github.com:domanc/CDMEmptyPageView.git

iOS无网络提示或无数据提示空白页的更多相关文章

  1. iOS 检测网络状态 自动判断 认为提示网络改变

    检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无能)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验WIFI\3G ...

  2. android 加载中、无网络、无数据、出错 四种状态的代码封装

    package com.weavey.loading.lib;import android.content.Context;import android.content.res.TypedArray; ...

  3. HP 1010、 1020、 1022 、M1005激光打印机内部无卡纸,但机器仍提示卡纸?

    HP 1010.1018.1020.1022.M1005激光打印机,硒鼓原装编号:Q2612A  1800页 ( A4纸,5%覆盖率).是办公桌面小型打印机中主流产品,故障率极小. 现有一台HP 10 ...

  4. iPhone屏蔽IOS更新、iPhone系统更新的提示(免越狱,有效期更新至2021年)

    iPhone屏蔽IOS更新.iPhone系统更新的提示(免越狱,有效期更新至2021年) 1.在Safari浏览器中粘贴如下链接,按提示打开链接. 输入http://apt.dataage.pub 2 ...

  5. 检测 iOS 系统网络权限被关闭

    背景 一直都有用户反馈无法正常联网的问题,经过定位,发现很大一部分用户是因为网络权限被系统关闭,经过资料搜集和排除发现根本原因是: 第一次打开 app 不能访问网络,无任何提示 第一次打开 app 直 ...

  6. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  7. iOS常用网络库之AFNetWorking

    简介 ​     `AFNetworking`是iOS开发网络API中最常用的第三方库,`github`中的`star`数充分说明了它在iOS开发中第三方库中的江湖地位  github地址:[AFNe ...

  8. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  9. iOS开发网络篇—搭建本地服务器

    iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...

随机推荐

  1. J2EE项目在weblogic下的改动

    1.struts所有配置文件放到classes根目录下 2〉java.lang.ClassCastException:weblogic.xml.jaxp.RegistryDocumentBuilder ...

  2. Python——基础数据类型(补充)

    1.基础数据类型汇总补充 (1)小数据池:   为了节省空间,数字和字符串有,其他的没有[了解]   数字:-5---256之间的数字共用一个内存地址 #(1)i1 = i2 id(i1) == id ...

  3. xshell连接kali

    连接出现错误,连接不上去,看到一篇文章可以使用,https://blog.csdn.net/yemaxq/article/details/78171241

  4. Java字符代码中干掉制表符、回车符和换行符

    Java字符代码中干掉制表符.回车符和换行符 代码片段: String sql = StringUtils.trim(sql).replaceAll("[\\r\\n\\t]",& ...

  5. [置顶] apt-get update 更新失败----如何清除破损而且陈旧的PPA仓库 (W: Failed to fetch http://ppa.launchpad.net/jonathonf/pyt)

    我使用sudo apt-get update之后,更新失败,遇到如下错误. W: Failed to fetch http://ppa.launchpad.net/jonathonf/python-3 ...

  6. node中一个基本的HTTP客户端向本地的HTTP服务器发送数据

    上一篇讲到了node可以轻松的向其他请求数据. 这一篇就来讲讲向本地服务器的数据交互. HTTP服务器代码,s.js var http=require("http"); var s ...

  7. oracle建立用户与授权(转载)

    创建表空间及用户: create tablespace 表空间名 datafile 'd:/seal.dbf' size 10M autoextend on;create user username ...

  8. Asp.net 的cookie问题

    写代码的发现的小问题 如果写入cookie的时候指定了domin域名 那么删除的时候必须也指定domin域名才行,即使你先读取了这个已经存在的cookie,但是还是要指定domin才能删除 /// & ...

  9. 一些通用的触发移动App崩溃的测试场景

    一些通用的触发移动App崩溃的测试场景,如下: 1 验证在有不同的屏幕分辨率,操作系统和运营商的多个设备上的App行为. 2 用新发布的操作系统版本验证App的行为. 3 验证在如隧道,电梯等网络质量 ...

  10. linux网络监视器

    vnstat iftop nethogs dig ipcalc