博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS -无网络页面的创建、判断当前网络是否正常、创建有无网络判断的UIViewController根视图...
阅读量:5891 次
发布时间:2019-06-19

本文共 2675 字,大约阅读时间需要 8 分钟。

  hot3.png

一:无网络页面的创建

①创建继承自UIView的NoWebView文件并绘制相应的无网络界面

这里我是用XIB文件绘制的,要留出一个Button,用来重新加载,将其响应事件添加到对应的.m文件中。

②上传点击事件(我用的是block语法)

(.h文件)

//定义一个blocktypedef void(^ClickBlock)();@interface NoNewView : UIView//防止block暴露在外-(void)setupWithClickBlock:(ClickBlock)block;

(.m文件)

//将block当做属性@property (nonatomic,strong) ClickBlock myBlock;-(void)setupWithClickBlock:(ClickBlock)block{    _myBlock = block;    }//button点击事件- (IBAction)ClickButton:(id)sender {       if (_myBlock != nil) {        _myBlock();    }    }

二:判断当前网络是否可用

首先引入两个第三方库Reachability和AFNetworkReachabilityManager

.h文件中对外声明一个方法,用来获取到当前网络状态。

-(BOOL)isNetWorking;

.m文件中

声明两个全局变量

@property(nonatomic,strong)AFNetworkReachabilityManager *reach;@property (nonatomic,assign) BOOL isNetGoing;
self.isNetGoing = NO;        self.reach= [AFNetworkReachabilityManager sharedManager];    //这个是网络可用时的回调      __weak AppDelegate*weakSelf = self;      [self.reach setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {           switch (status) {            case AFNetworkReachabilityStatusUnknown:                weakSelf.isNetGoing = NO;                break;            case AFNetworkReachabilityStatusNotReachable:                weakSelf.isNetGoing = NO;                break;            case AFNetworkReachabilityStatusReachableViaWiFi:                weakSelf.isNetGoing = YES;                break;            case AFNetworkReachabilityStatusReachableViaWWAN:                weakSelf.isNetGoing = YES;                break;            default:                weakSelf.isNetGoing = YES;                break;        }         }];      [self.reach startMonitoring];

外界通过获取isNetWoriking的值,来判断当前网络是否可用

- (BOOL)isNetWorking{    return self.isNetGoing;}

三:根视图的创建

.h文件

@class NoNewView;typedef void(^ClickBlock)();@interface RootUIViewController : UIViewController@property(nonatomic,strong)NoNewView *View_noNet;//如果没有网络,执行某操作,并隐藏原视图显示无网络视图-(void)ifNoNetWork:(ClickBlock)action Hidden:(id)View;

.m文件

@property(nonatomic,strong)ClickBlock Action;@property(nonatomic,strong)UITableView *TV;@property(nonatomic,strong)UICollectionView *CL;
-(void)ifNoNetWork:(ClickBlock)action Hidden:(id)View{    //判断是否是某个类    if ([View isKindOfClass:[UITableView class]]) {       self.TV=View;    }else if ([View isKindOfClass:[UICollectionView class]]){       self.CL=View;    }    //用户点击了重新加载    _Action=action;    [self.View_noNet setupWithClickBlock:_Action];    if (self.View_noNet!=nil) {        [self.view addSubview:self.View_noNet];           }}

这样一来,在每个视图获取网络数据前,添加上

-(void)getNetWork{    [self ifNoNetWork:^{        [self getNetWork];    } Hidden:self.CL];/*   获取网络数据*/}

就可以到达响应的目的

转载于:https://my.oschina.net/sgcllr/blog/841599

你可能感兴趣的文章
为什么要使用 SPL中的 SplQueue实现队列
查看>>
文件的相关操作(创建、打开、写入、读出、重命名)
查看>>
Redis与memecache的区别
查看>>
品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
查看>>
PHP const关键字
查看>>
设计模式之代理模式之二(Proxy)
查看>>
链接&装载&库-入口函数和程序初始化
查看>>
windows环境下安卓开发环境的快速搭建
查看>>
ssh 安装笔记
查看>>
css的再深入6(更新中···)
查看>>
游戏音效下载网站大全
查看>>
SpringBoot中实现依赖注入功能
查看>>
angular $resouse服务
查看>>
Spring Boot自定义Redis缓存配置,保存value格式JSON字符串
查看>>
知识分析与应用基础作业(一)
查看>>
B/S与C/S区别
查看>>
实验五
查看>>
bzoj1821
查看>>
文法分析
查看>>
Java对象模型
查看>>