适用于各种无数据view显示
SYLoadingResultView.h
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, SYLoadingResultStyle) {
SYLoadingResultDefault, //两个标题一个按钮(默认)
SYLoadingResultImageTitleBtn, //一张图片、一个标题、一个按钮
SYLoadingResultImageTitle, //一张图片、一个标题。
SYLoadingResultImageTwoTitle, //一张图片、两个标题
SYLoadingResultImageTwoTitleBtn, //一张图片、两个标题、一个按钮
};
@protocol SYLoadingResultViewDeleagte <NSObject>
@optional
- (void)loadingResultViewBtnClicked:(UIButton *)sender;
@end
typedef void(^callBackBlock)(UIButton *btn);
@interface SYLoadingResultView : UIView
@property (nonatomic, weak) id <SYLoadingResultViewDeleagte> delegate;
+ (SYLoadingResultView *)showLoadingResultOnView:(UIView *)view withBlock:(callBackBlock)block;
+ (SYLoadingResultView *)showLoadingResultOnView:(UIView *)View withStyle:(SYLoadingResultStyle)style withBlock:(callBackBlock)block;
+ (SYLoadingResultView *)showNotDataWithOnView:(UIView *)view;
+ (SYLoadingResultView *)showLoadingResultView:(UIView *)view reloadBlock:(callBackBlock)block;
+ (void)dismissOnView:(UIView *)view;
- (void)setUpCallBackBlock:(callBackBlock)block;
- (void)setMainTitleStr:(NSString *)string;
- (void)setMainTitleAttriStr:(NSAttributedString *)attriStr;
- (void)setSubTitleStr:(NSString *)string;
- (void)setSubTitleAttriStr:(NSAttributedString *)attriStr;
- (void)setImg:(UIImage *)image;
- (void)setBtnStr:(NSString *)BtnStr;
- (void)setContentViewBackgroundColor:(UIColor *)backgroundColor;
- (void)setContainerViewCenterY:(CGFloat)centerY;
@end
SYLoadingResultView.m
#import "SYLoadingResultView.h"
#import "Masonry.h"
//static NSString *const defaultMainLabelStr = @"数据加载失败";
//static NSString *const defaultSubLabelStr = @"请检查您的手机是否联网,点击按钮重新加载";
//static NSString *const defaultBtnStr = @"重新加载";
static NSString * defaultMainLabelStr = @"数据加载失败";
static NSString * defaultSubLabelStr = @"请检查您的手机是否联网,点击按钮重新加载";
static NSString * defaultBtnStr = @"重新加载";
@interface SYLoadingResultView ()
@property (nonatomic, assign) SYLoadingResultStyle style;
@property (nonatomic, assign) CGFloat containerCenterY;
@property (nonatomic, strong) UIView *backgroundView;
@property (nonatomic, strong) UIView *containerView;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UILabel *mainLabel;
@property (nonatomic, strong) UILabel *subLabel;
@property (nonatomic, strong) UIButton *button;
@property (nonatomic, copy) callBackBlock clickBlock;
@end
@implementation SYLoadingResultView
#pragma mark - LifeCycle
- (instancetype)initWithFrame:(CGRect)frame
{
self = [self initWithStyle:SYLoadingResultDefault withFrame:frame];
return self;
}
- (instancetype)initWithStyle:(SYLoadingResultStyle)style
{
self = [self initWithStyle:style withFrame:CGRectZero];
return self;
}
- (instancetype)initWithStyle:(SYLoadingResultStyle)style withFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
defaultMainLabelStr = JDLocalized(@"errorPage_title", nil);
defaultSubLabelStr = JDLocalized(@"errorPage_tip", nil);
defaultBtnStr = JDLocalized(@"errorPage_btnText", nil);
_style = style;
_containerCenterY = 0;
_backgroundView = [UIView new];
_backgroundView.backgroundColor = JDColor(0xf5f5f5);
_containerView = [UIView new];
_containerView.backgroundColor = JDColor(0xf5f5f5);
_imageView = [UIImageView new];
_imageView.image = [UIImage imageNamed:@"No-net"];
_mainLabel = [UILabel new];
_mainLabel.text = defaultMainLabelStr;
_mainLabel.font = [UIFont systemFontOfSize:17];
_mainLabel.textColor = JDColor(0x333333);
_mainLabel.textAlignment = NSTextAlignmentCenter;
_mainLabel.numberOfLines = 0;
switch (style) {
case SYLoadingResultDefault:
_mainLabel.text = defaultMainLabelStr;
break;
case SYLoadingResultImageTitleBtn:
_mainLabel.text = defaultMainLabelStr;
break;
case SYLoadingResultImageTitle:
_mainLabel.text = defaultMainLabelStr;
break;
case SYLoadingResultImageTwoTitle:
_mainLabel.text = defaultMainLabelStr;
break;
default:
break;
}
_subLabel = [UILabel new];
_subLabel.text = defaultSubLabelStr;
_subLabel.font = [UIFont systemFontOfSize:13];
_subLabel.textColor = JDColor(0x999999);
_subLabel.textAlignment = NSTextAlignmentCenter;
_subLabel.numberOfLines = 0;
_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_button setTitle:defaultBtnStr forState:UIControlStateNormal];
[_button setTitleColor:JDColor(0xe6454a) forState:UIControlStateNormal];
[_button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
UIImage *reloadBtnImg = [UIImage imageNamed:@"Roundbutton"];
reloadBtnImg = [reloadBtnImg resizableImageWithCapInsets:UIEdgeInsetsMake(2, 19, 2, 19)
resizingMode:UIImageResizingModeStretch];
[_button setBackgroundImage:reloadBtnImg forState:UIControlStateNormal];
UIImage *reloadSelBtnImg = [UIImage imageNamed:@"RoundbuttonSelected"];
reloadSelBtnImg = [reloadSelBtnImg resizableImageWithCapInsets:UIEdgeInsetsMake(2, 19, 2, 19)
resizingMode:UIImageResizingModeStretch];
[_button setBackgroundImage:reloadSelBtnImg forState:UIControlStateHighlighted];
[_button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)updateConstraints
{
[self addSubview:self.backgroundView];
[self.backgroundView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(UIEdgeInsetsZero);
}];
[self updateConstraintsWithStyle:self.style];
[self addSubview:self.containerView];
[self.containerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(0);
make.centerY.mas_equalTo(self.containerCenterY);
}];
[super updateConstraints];
}
- (void)updateConstraintsWithStyle:(SYLoadingResultStyle)style
{
[self.containerView removeAllSubviews];
switch (style) {
case SYLoadingResultDefault:
{
[self.containerView addSubview:self.mainLabel];
[self.mainLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.mas_equalTo(0);
}];
[self.containerView addSubview:self.subLabel];
[self.subLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.mainLabel.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
}];
[self.containerView addSubview:self.button];
[self.button mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.subLabel.mas_bottom).mas_offset(20);
make.centerX.mas_equalTo(0);
make.size.mas_equalTo(CGSizeMake(150, 40));
make.bottom.mas_equalTo(0);
}];
}
break;
case SYLoadingResultImageTitleBtn:
{
[self.containerView addSubview:self.imageView];
[self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_offset(0);
make.centerX.mas_equalTo(self.containerView.mas_centerX);
make.size.mas_equalTo(self.imageView.image.size);
}];
[self.containerView addSubview:self.mainLabel];
[self.mainLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.imageView.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
}];
[self.containerView addSubview:self.button];
[self.button mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.mainLabel.mas_bottom).mas_offset(20);
make.size.mas_equalTo(CGSizeMake(150, 40));
make.centerX.mas_equalTo(self.containerView.mas_centerX);
make.bottom.mas_equalTo(0);
}];
}
break;
case SYLoadingResultImageTitle:
{
[self.containerView addSubview:self.imageView];
[self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_offset(0);
make.centerX.mas_equalTo(self.containerView.mas_centerX);
make.size.mas_equalTo(self.imageView.image.size);
}];
[self.containerView addSubview:self.mainLabel];
[self.mainLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.imageView.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
make.bottom.mas_equalTo(0);
}];
}
break;
case SYLoadingResultImageTwoTitle:
{
[self.containerView addSubview:self.imageView];
[self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_offset(0);
make.centerX.mas_equalTo(self.containerView.mas_centerX);
make.size.mas_equalTo(self.imageView.image.size);
}];
[self.containerView addSubview:self.mainLabel];
[self.mainLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.imageView.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
}];
[self.containerView addSubview:self.subLabel];
[self.subLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.mainLabel.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
make.bottom.mas_equalTo(0);
}];
}
break;
case SYLoadingResultImageTwoTitleBtn:
{
[self.containerView addSubview:self.imageView];
[self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_offset(0);
make.centerX.mas_equalTo(self.containerView.mas_centerX);
make.size.mas_equalTo(self.imageView.image.size);
}];
[self.containerView addSubview:self.mainLabel];
[self.mainLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.imageView.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
}];
[self.containerView addSubview:self.subLabel];
[self.subLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.mainLabel.mas_bottom).mas_offset(10);
make.left.right.mas_equalTo(0);
}];
[self.containerView addSubview:self.button];
[self.button mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.subLabel.mas_bottom).mas_offset(20);
make.size.mas_equalTo(CGSizeMake(150, 40));
make.centerX.mas_equalTo(self.containerView.mas_centerX);
make.bottom.mas_equalTo(0);
}];
}
break;
default:
break;
}
}
+ (SYLoadingResultView *)showLoadingResultOnView:(UIView *)view withBlock:(callBackBlock)block
{
return [SYLoadingResultView showLoadingResultOnView:view withStyle:SYLoadingResultDefault withBlock:block];
}
+ (SYLoadingResultView *)showLoadingResultOnView:(UIView *)View withStyle:(SYLoadingResultStyle)style withBlock:(callBackBlock)block
{
if (!View) {
return nil;
}
SYLoadingResultView *loadingResultView = [[SYLoadingResultView alloc] initWithStyle:style];
[View addSubview:loadingResultView];
[loadingResultView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(UIEdgeInsetsZero);
}];
[loadingResultView setUpCallBackBlock:block];
return loadingResultView;
}
+ (SYLoadingResultView *)showNotDataWithOnView:(UIView *)view
{
SYLoadingResultView *resultView = [SYLoadingResultView showLoadingResultOnView:view withStyle:SYLoadingResultImageTitle withBlock:nil];
UIImage *img = [UIImage imageNamed:@"error_notdata"];
[resultView setImg:img];
NSMutableAttributedString *attriStr = [[NSMutableAttributedString alloc] initWithString:@"没有数据记录"];
[attriStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14.0] range:NSMakeRange(0, attriStr.length)];
//添加文字背景颜色
[attriStr addAttribute:NSForegroundColorAttributeName value:JDColor(0x999999) range:NSMakeRange(0, attriStr.length)];
[resultView setMainTitleAttriStr:attriStr];
[resultView updateConstraintsIfNeeded];
return resultView;
}
+ (SYLoadingResultView *)showLoadingResultView:(UIView *)view reloadBlock:(callBackBlock)block
{
SYLoadingResultView *resultView = [SYLoadingResultView showLoadingResultOnView:view withStyle:SYLoadingResultImageTitleBtn withBlock:block];
UIImage *img = [UIImage imageNamed:@"error_noNet"];
[resultView setImg:img];
NSMutableAttributedString *attriStr = [[NSMutableAttributedString alloc] initWithString:@"亲, 您的网络不给力哦!"];
[attriStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14.0] range:NSMakeRange(0, attriStr.length)];
//添加文字背景颜色
[attriStr addAttribute:NSForegroundColorAttributeName value:JDColor(0x999999) range:NSMakeRange(0, attriStr.length)];
[resultView setMainTitleAttriStr:attriStr];
[resultView setBtnStr:@"刷新看看"];
[resultView updateConstraintsIfNeeded];
return resultView;
}
+ (void)dismissOnView:(UIView *)view
{
[view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[SYLoadingResultView class]]) {
[obj dismiss];
}
}];
}
- (void)dismiss
{
[self removeFromSuperview];
}
- (void)setContainerViewCenterY:(CGFloat)centerY
{
self.containerCenterY = centerY;
[self setNeedsUpdateConstraints];
}
- (void)buttonClicked
{
if ([self.delegate respondsToSelector:@selector(loadingResultViewBtnClicked:)]) {
[self.delegate loadingResultViewBtnClicked:self.button];
[self dismiss];
return;
}
if (self.clickBlock != nil) {
self.clickBlock(self.button);
[self dismiss];
} else {
[self dismiss];
}
}
#pragma mark - Setter&Getter
- (void)setUpCallBackBlock:(callBackBlock)block
{
if (block) {
self.clickBlock = block;
}
}
- (void)setMainTitleStr:(NSString *)string
{
self.mainLabel.text = string;
[self setNeedsUpdateConstraints];
}
- (void)setMainTitleAttriStr:(NSAttributedString *)attriStr
{
self.mainLabel.attributedText = attriStr;
[self setNeedsUpdateConstraints];
}
- (void)setSubTitleStr:(NSString *)string
{
self.subLabel.text = string;
[self setNeedsUpdateConstraints];
}
- (void)setSubTitleAttriStr:(NSAttributedString *)attriStr
{
self.subLabel.attributedText = attriStr;
[self setNeedsUpdateConstraints];
}
- (void)setImg:(UIImage *)image
{
self.imageView.image = image;
[self setNeedsUpdateConstraints];
}
- (void)setBtnStr:(NSString *)BtnStr
{
[self.button setTitle:BtnStr forState:UIControlStateNormal];
[self setNeedsUpdateConstraints];
}
- (void)setContentViewBackgroundColor:(UIColor *)backgroundColor
{
self.containerView.backgroundColor = backgroundColor;
}
@end
网友评论