iOS 网络请求失败View封装

原创 2017年01月03日 15:35:39

封装一个NoData的View方便在网络请求失败时调用

1新建一个继承UIView的类:XSNoDataView

头文件里

#import <UIKit/UIKit.h>
typedef void (^ButtonBlock) (id sender);
@interface XSNoDataView : UIView

- (void)addButtonAction:(ButtonBlock)block;
@end

m文件里

#import "XSNoDataView.h"
#define ScreenWidth  [UIScreen mainScreen].bounds.size.width
#define ScreenHeight  [UIScreen mainScreen].bounds.size.height

@interface XSNoDataView ()

@property (nonatomic, strong, nullable) ButtonBlock block;
@property (nonatomic, strong, nullable) UIButton *button;

@end

@implementation XSNoDataView

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/
- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.frame = CGRectMake(ScreenWidth*3/8, adoptValue(240), ScreenWidth / 4, ScreenWidth / 4);
        [self addSubview:imageView];
        
        NSMutableArray *imgArray = [NSMutableArray array];
        for (int i=0; i<3; i++) {
            UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"netError%d.png",i]];
            [imgArray addObject:image];
        }
        imageView.animationImages = imgArray;
        imageView.animationDuration = 6*0.15;
        imageView.animationRepeatCount = 0;
        [imageView startAnimating];
        
        
        UILabel *label = [[UILabel alloc] init];
        label.frame = CGRectMake(0, imageView.frame.origin.y+20+ScreenWidth/4, ScreenWidth, 30);
        label.textColor = [UIColor lightGrayColor];
        label.text = @"亲,您的手机网络不太顺畅喔~";
        label.textAlignment = NSTextAlignmentCenter;
        label.numberOfLines = 0;
        [self addSubview:label];
        
        UIButton *refreshBTN = [UIButton buttonWithType:UIButtonTypeCustom];
        [refreshBTN setTitle:@"重新加载" forState:UIControlStateNormal];
        [refreshBTN setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
        refreshBTN.titleLabel.font = [UIFont systemFontOfSize:14];
        refreshBTN.layer.masksToBounds = YES;
        refreshBTN.layer.borderWidth = 1;
        refreshBTN.layer.cornerRadius = 3;
        refreshBTN.layer.borderColor = [UIColor lightGrayColor].CGColor;
        refreshBTN.frame = CGRectMake(ScreenWidth/2-50, label.frame.origin.y+60, 100, 30);
        [self addSubview:refreshBTN];
        [refreshBTN addTarget:self action:@selector(buttonAction) forControlEvents:(UIControlEventTouchUpInside)];

    }
    return self;
}

//实现block回调的方法
- (void)addButtonAction:(ButtonBlock)block {
    self.block = block;
}
- (void)buttonAction {
    if (self.block) {
        self.block(self);
    }
}
@end

2 在需要的UIViewController里导入这个类

在网络请求失败的方法里调用,block里就是点击刷新(重试)走的方法,如下:

@property (nonatomic, strong, nullable) XSNoDataView *baseView;

        if (self.baseView) {
            self.baseView.hidden = NO;
        }else{
            self.baseView = [[XSNoDataView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
            self.baseView.backgroundColor = [UIColor whiteColor];
            // self.baseView.frame = self.view.frame;
            [self.view addSubview:self.baseView];
            @weakify(self)//弱引用
            [self.baseView addButtonAction:^(id sender) {
                @strongify(self)
                self.baseView.hidden = YES;
                [self loadData];
            }];
            
        }



版权声明:本文为博主原创文章,未经博主允许不得转载。

AFNetworking网络请求失败

之前iOS开发一直用ASIHTTPRequest进行网络请求,但是这个框架很长时间已经不更新了。我了解到目前很多应用都在使用AFNetworking,今天尝试了一下,发现了不少问题。...
  • lkj345
  • lkj345
  • 2016年01月23日 17:12
  • 1257

iOS POST网络请求状态code:500的解决方案

iOS 10 用 [NSURLSession uploadTaskWithRequest:request fromData:jsondata completionHandler:^(NSData * ...

ios9 HTTP网络请求失败 and 第三方sdk 报错问题解决方法

ios9 HTTP网络请求失败 and 第三方sdk 报错问题解决方法

iOS网络请求 post同步异步封装demo

  • 2015年11月18日 22:56
  • 38KB
  • 下载

iOS网络请求简单封装

import import “MBProgressHUD.h”define BASEURL @”http://140.207.46.14:8017/UserInfoWebService.asmx/”@...

iOS开发——POST异步网络请求自行封装

IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的。   在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子。我这里要给出的封装...

iOS项目中的网络请求和上下拉刷新封装

现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此对我的项目进行一个网络请求的封装和上下拉刷新的封装,如果有哪里不对,或更优的地方请在下面留言。附上展示效果项目的G...

ios自定义异步post网络请求的封装

本文转载自http://www.cnblogs.com/zer0Black/p/3973465.html 首先要判断网络连接是否可用,利用苹果为我们提供的网络状态判断的封装Reachabilit...

iOS之网络请求的简单封装

#import //定义枚举 用来标示请求的类型 typedef NS_ENUM(NSInteger,RequestType) { GET, POST }; //网络请求完成的bl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 网络请求失败View封装
举报原因:
原因补充:

(最多只允许输入30个字)