app中无网络页面的添加

栏目: Python · 发布时间: 6年前

内容简介:app中无网络页面的添加

前言

在开发app的过程中,为了能有更好的用户体验,往往会加入没有网络时的页面展示,告诉用户当前的网络状态不可用,那么具体如何来实现实时监测网络状态的呢,就是我们接下来要讨论的问题了。

实现思路

我的实现思路大致如下:采用第三方库RealReachability监听网络状态的变化,然后在基类中添加监听,然后在基类中提供对外的方法,用来判断当前的网络状态,以便子类可以在不同的网络状态时做出对应的操作。最后自定义一个无网络界面,在没有链接网络时,添加到界面上,有网络时重新进行数据请求,并移除无网络界面即可。

具体操作

1.项目中添加第三方库—— RealReachability,这里我就不多做介绍,大家应该都会添加,不会的可以 点此 ,这里会有比较详细的说明;

2.在appdelegate开启全局网络监测,具体代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    //开启网络监测
    [GLobalRealReachability startNotifier];
    return YES;
}

3.定义一个枚举,用来表示网络链接的三种状态,同时定义一个变量,用来判断当前的网络状态,具体如下:

typedef NS_ENUM(NSUInteger, XSWNetWorkStatus) {
    
    XSWNetWorkStatusNoInternet,//没有网络
    XSWNetWorkStatusFlow,//流量连接
    XSWNetWorkStatusWifi //wifi链接
};
//网络状态
@property (nonatomic,assign) XSWNetWorkStatus netStatus;

4.在基类中给通过RealReachability 给netStatus变量赋值,并添加监听,用来监测网络状态的变化,具体操作如下:

RealReachability *reachability = [RealReachability sharedInstance];
    ReachabilityStatus status = [reachability currentReachabilityStatus];
    switch (status) {
        case 0:
        {
            _netStatus = XSWNetWorkStatusNoInternet;
        }
            break;
        case 1:{
            
            _netStatus = XSWNetWorkStatusFlow;
        }
            break;
        case 2:{
            
            _netStatus = XSWNetWorkStatusWifi;
        }
            break;
        default:
            break;
    }
    //监听网络状态
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(networkChanged:)
                                                 name:kRealReachabilityChangedNotification
                                               object:nil];

5.实现监听回调事件,给netStatus赋值,并提供对外的方法,便于子类对不同的网络状态的处理,具体操作如下:

#pragma mark ==================监听事件的回调==================
- (void)networkChanged:(NSNotification *)notification
{
    RealReachability *reachability = (RealReachability *)notification.object;
    ReachabilityStatus status = [reachability currentReachabilityStatus];
    switch (status) {
        case 0:
        {
            _netStatus = XSWNetWorkStatusNoInternet;
            [self monitorNetStateChanged:0];
        }
            break;
        case 1:{
            
            _netStatus = XSWNetWorkStatusFlow;
            [self monitorNetStateChanged:1];
        }
            break;
        case 2:{
            
            _netStatus = XSWNetWorkStatusWifi;
            [self monitorNetStateChanged:2];
        }
            break;
        default:
            break;
    }
}
#pragma mark ==================网络状态改变==================
-(void)monitorNetStateChanged:(NSInteger)netState {
    
    //子类实现
}
  1. 子类重写monitorNetStateChanged:(NSInteger)netState方法,针对当前的网络状态,做出相应的操作即可,具体代码如下:
#pragma mark ==================网络状态的判断==================
-(void)monitorNetStateChanged:(NSInteger)netState {
    
    if (netState == 0) {
        
        //没有网络 展示没有网络界面,或是提示用户当前网络状态不可用
        
    }else{
        
        //有网,移除无网络界面,重新进行数据请求
       
    }
    
}

至此,没有网络界面的添加就说完了,如果大家有更好的实现方法或者是对我说的方法有任何的疑问,欢迎留言,我会在第一时间回复大家。最后,将我写的一个小demo附上, 点此查看


以上所述就是小编给大家介绍的《app中无网络页面的添加》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Math Adventures with Python

Math Adventures with Python

Peter Farrell / No Starch Press / 2018-11-13 / GBP 24.99

Learn math by getting creative with code! Use the Python programming language to transform learning high school-level math topics like algebra, geometry, trigonometry, and calculus! In Math Adventu......一起来看看 《Math Adventures with Python》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具