一个app肯定是有默认页,在后台拉不到数据报错,无网络,服务器在维护中等,这些都需要默认页来展示。这里说下我是怎么来处理这块的。
首先封装这个页面:就是一个自定义的view,我是直接加到baseViewController然后默认隐藏,在网络请求失败的时候调用。
封装思路:
- (void)showLoadFailedNoticeWithAction:(SEL)action isWeb:(BOOL)isWeb;
这个方法得写在.h中。这里传了2个参数action和isweb,action是在你重新加载的时候需要用到的,isweb是我自己的webview页面自己加的处理,你们可以按需求加。
- (void)showLoadFailedNoticeWithAction:(SEL)action isWeb:(BOOL)isWeb {
_action = action;
if (isWeb) {
[self netState];
}else{
[self netState];
self.hidden = NO;
}
}
这是方法实现,如果不是webViewControoler里的直接展示,因为我这里的需求是webViewControoler只需要展示服务器维护时的默认页。然后继续往下看
- (void)netState {
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
switch (manager.networkReachabilityStatus) {
case AFNetworkReachabilityStatusUnknown: {
NSLog(@"未知网络");
self.netImage.image = [UIImage imageNamed:@"bg_wifi"];
self.netLabel.text = @"网络出状况啦,检查后点击屏幕重试";
}
break;
case AFNetworkReachabilityStatusNotReachable: {
NSLog(@"没有网络");
self.netImage.image = [UIImage imageNamed:@"bg_wifi"];
self.netLabel.text = @"网络出状况啦,检查后点击屏幕重试";
}
break;
case AFNetworkReachabilityStatusReachableViaWWAN: {
NSLog(@"手机自带网络");
self.netImage.image = [UIImage imageNamed:@"bg_error"];
self.netLabel.text = @"出错啦,点击屏幕重试";
[self serverStatus];
}
break;
case AFNetworkReachabilityStatusReachableViaWiFi: {
NSLog(@"WIFI");
self.netImage.image = [UIImage imageNamed:@"bg_error"];
self.netLabel.text = @"出错啦,点击屏幕重试";
[self serverStatus];
}
break;
}
}
在有网的情况下调用了[self serverStatus]这里是拿服务端的状态,就是后台单独给的一个服务器状态的接口请求就不写出来了。
看下使用吧:(这块是写在baseViewController)
- (void)showLoadFailedNoticeWithAction:(SEL)action frame:(CGRect)frame isWeb:(BOOL)isWeb {
if (!self.netStatueView) {
self.netStatueView = [[KZWNetStateView alloc] initWithFrame:frame];
self.netStatueView.delegate = self;
[self.view addSubview:self.netStatueView];
}
[self hideBGProgess];
[self.netStatueView showLoadFailedNoticeWithAction:action isWeb:isWeb];
}
- (void)netStateViewWithAction:(SEL)action {
[self showBGProgress];
SuppressPerformSelectorLeakWarning([self performSelector:action withObject:nil];);
}
最后的调用:
[self showLoadFailedNoticeWithAction:@selector(loadData) frame:self.homeTableView.frame isWeb:NO];
好了,完!欢迎讨论。。。。。
网友评论