iOS无网络提示或无数据提示

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

先看效果图:

1.网络错误

2.无数据

上菜:

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

@class CDMNetErrorPageView , CDMBlankPageView;

@interface UIView (CDMEmpty)

//CDMNetErrorPageView
@property (nonatomic,strong) CDMNetErrorPageView * netErrorPageView;
- (void)configReloadAction:(void(^)())block;
- (void)showNetErrorPageView;
- (void)hideNetErrorPageView;

//CDMBlankPageView
@property (nonatomic,strong) CDMBlankPageView* blankPageView;
- (void)showBlankPageView;
- (void)hideBlankPageView;

@end

#pragma mark --- CDMNetErrorPageView
@interface CDMNetErrorPageView : UIView
@property (nonatomic,copy) void(^didClickReloadBlock)();
@end

#pragma mark --- CDMBlankPageView
@interface CDMBlankPageView : UIView

@end

核心代码:

@interface UIView ()

@property (nonatomic,copy) void(^reloadAction)();

@end

@implementation UIView (CDMEmpty)

- (void)setReloadAction:(void (^)())reloadAction{
    objc_setAssociatedObject(self, @selector(reloadAction), reloadAction, OBJC_ASSOCIATION_COPY);
}
- (void (^)())reloadAction{
    return objc_getAssociatedObject(self, _cmd);
}

//CDMNetErrorPageView
- (void)setNetErrorPageView:(CDMNetErrorPageView *)netErrorPageView{
    [self willChangeValueForKey:NSStringFromSelector(@selector(netErrorPageView))];
    objc_setAssociatedObject(self, @selector(netErrorPageView), netErrorPageView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:NSStringFromSelector(@selector(netErrorPageView))];
}
- (CDMNetErrorPageView *)netErrorPageView{
    return objc_getAssociatedObject(self, _cmd);
}

- (void)configReloadAction:(void (^)())block{
    self.reloadAction = block;
    if (self.netErrorPageView && self.reloadAction) {
        self.netErrorPageView.didClickReloadBlock = self.reloadAction;
    }
}

- (void)showNetErrorPageView{

    if (!self.netErrorPageView) {
        self.netErrorPageView = [[CDMNetErrorPageView alloc]initWithFrame:self.bounds];
        if (self.reloadAction) {
            self.netErrorPageView.didClickReloadBlock = self.reloadAction;
        }
    }
    [self addSubview:self.netErrorPageView];
    [self bringSubviewToFront:self.netErrorPageView];
}
- (void)hideNetErrorPageView{
    if (self.netErrorPageView) {
        [self.netErrorPageView removeFromSuperview];
        self.netErrorPageView = nil;
    }
}

//CDMBlankPageView
- (void)setBlankPageView:(CDMBlankPageView *)blankPageView{
    [self willChangeValueForKey:NSStringFromSelector(@selector(blankPageView))];
    objc_setAssociatedObject(self, @selector(blankPageView), blankPageView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    [self didChangeValueForKey:NSStringFromSelector(@selector(blankPageView))];
}
- (CDMBlankPageView *)blankPageView{
    return objc_getAssociatedObject(self, _cmd);
}
- (void)showBlankPageView{

    if (!self.blankPageView) {
        self.blankPageView = [[CDMBlankPageView alloc]initWithFrame:self.bounds];
    }
    [self addSubview:self.blankPageView];
    [self bringSubviewToFront:self.blankPageView];
}
- (void)hideBlankPageView{
    if (self.blankPageView) {
        [self.blankPageView removeFromSuperview];
        self.blankPageView = nil;
    }
}

@end

调用:

// 网络错误时,展示错误页
    [self.view showNetErrorPageView];
    [self.view configReloadAction:^{

        NSLog(@"刷新");
    }];
    //隐藏网络错误页
    [self.view hideNetErrorPageView];

   ---------------------------------------------------------

    //无数据展示空白页
    [self.view showBlankPageView];
    //无数据隐藏空白页
    [self.view hideBlankPageView];

Demo地址:[email protected]:domanc/CDMEmptyPageView.git

原文地址:https://www.cnblogs.com/HFEL/p/9055321.html

时间: 2024-10-14 23:54:41

iOS无网络提示或无数据提示的相关文章

IOS的网络提示(E\2G\3G\4G\WIFI\无网)

1.介绍 网络提示是App开发中不可缺少的模块.现在App需求智能化,要求根据网络的变化可以自动做出合理的处理(包括提示.下载...等).对于网络的处理也非常简单,实现也就几行代码(这是因为,苹果对网络变化进行了整理). 苹果官方提供一个监控网络变化的文件名字为 Reachability.对于Reachability也有其不足的地方,它不能更详细的判断用户是那种手机网络,只是提供给开发者一个统称的表示. 2.官方 Reachability 的介绍 Reachability(官方)的获取方法是打开

两行代码搞定UITableView无数据无网络显示-b

不知是否有像我一样的,每次写TableView在监听网络和无数据源时逻辑处理提示视图都是一堆代码,很繁琐也很重复的垃圾代码(可能就只有我这样??,求大神推荐一个好的框架给小弟使用),于是最近闲来无事决定封装一下,有不足的地方希望大家指出,一同进步. 本次监听网络状态依赖于`Reachability` 下面是本次封装的关键代码 关键性代码 通过分类给`TableView`增加空视图和无网络视图属性,这样方便您使用自定义显示视图样式来展示.内部我也写了一个空视图样式,您可以用来修改和使用. tabl

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

iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache-tomcat-6.0.41.tar eclipse-jee-kepler-SR2-macosx-cocoa-x86_64.tar.gz jdk-8u5-macosx-x64.dmg 二.安装和配置本地服务器环境(java)步骤: (1)在文档路径下,新建一个文件夹(NetWord),解压eclips

iOS开发网络篇—GET请求和POST请求

iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:u

[转]无网络环境,在Windows Server 2008 R2和SQL Server 2008R2环境安装SharePoint2013 RT

无网络环境,在Windows Server 2008 R2和SQL Server 2008R2环境安装SharePoint2013 RT,这个还有点麻烦,所以记录一下,下次遇到省得绕弯路.进入正题: 首先准备好Windows Server 2008 R2,SQL Server 2008 R2,SharePoint Server 2013安装介质.密钥和补丁,补丁情况可参照下表: Product Number Description Download Address Windows Server

iOS开发网络篇—NSURLConnection基本使用

iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSUR

iOS开发网络篇—数据缓存

iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器

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

iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高.可惜作者早已停止更新,有一些潜在的BUG无人去解决 ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考 http://www.cnblogs.com/dot

iOS开发网络篇—使用ASI框架进行文件下载

原文  http://www.cnblogs.com/wendingding/p/3961681.html iOS开发网络篇—使用ASI框架进行文件下载 说明 :本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @