自定义uiview 当没有数据的时候 显示自定义的uiview界面
//
// ZSDTJNoDataView.h
// ZSDTJNoDataView
//
// Created by Mac on 14-12-28.
// Copyright (c) 2014年 ZSD. All rights reserved.
// //当发起网络请求的时候没有数据的时候界面显示指定的背景图
#import <UIKit/UIKit.h>
typedef void(^ZSDNoDataViewCompleteHandler) (NSInteger buttonIndex) ;
typedef NS_ENUM(NSInteger, ZSDNoDataViewType)
{
ZSDNoDataViewTypeInvestMent=, //投资理财
ZSDNoDataViewTypeRecord,//交易记录
ZSDNoDataViewTypeMyInvest,//我的投资
ZSDNoDataViewTypeNews,//消息中心
ZSDNoDataViewTypePlan //回款计划 }; @class ZSDTJNoDataView;
@protocol ZSDTJNoDataViewDelegate <NSObject>
-(void)noDataView:(ZSDTJNoDataView *)noDataView andButtonClick:(NSInteger)selectBtnIndex;
@end
@interface ZSDTJNoDataView : UIView
{
ZSDNoDataViewCompleteHandler completeHandler;
}
@property(nonatomic,weak)id<ZSDTJNoDataViewDelegate>delegate; +(void)showInBaseView:(UIView *)baseView andNoDataViewType:(ZSDNoDataViewType)noDataViewType andCompeleteHandler:(ZSDNoDataViewCompleteHandler) handler; -(void)showInBaseView:(UIView *)baseView andNoDataViewDelegate:(id)delegate andNoDataViewType:(ZSDNoDataViewType)noDataViewType; -(void)showInBaseView:(UIView *)baseView andNoDataViewType:(ZSDNoDataViewType)noDataViewType andCompeleteHandler:(ZSDNoDataViewCompleteHandler) handler ; @end
//
// ZSDTJNoDataView.m
// ZSDTJNoDataView
//
// Created by Mac on 14-12-28.
// Copyright (c) 2014年 ZSD. All rights reserved.
// #import "ZSDTJNoDataView.h"
//红色按钮正常状态
#define kRedButtonNormalColor [UIColor colorWithRed:0.84 green:0.23 blue:0.29 alpha:1]
#define kImageSize CGSizeMake(55.0f,55.0f)
@implementation ZSDTJNoDataView
{
UIView *contentView;//存放所有控件的view;
UILabel *textLabel;//文本label
UIImageView *photoImageView;//显示图片
UIButton *redButton;//按钮 }
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)setUpNoDataView:(ZSDNoDataViewType)noDataViewType
{
//创建一个contentview对象
contentView=[[UIView alloc]init];
contentView.translatesAutoresizingMaskIntoConstraints=NO;
[self addSubview:contentView]; //为contentview添加水平约束
NSArray *contentView_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options: metrics:nil views:NSDictionaryOfVariableBindings(contentView)];
[self addConstraints:contentView_H]; //创建一个photoImage对象
photoImageView=[[UIImageView alloc]init];
photoImageView.translatesAutoresizingMaskIntoConstraints=NO;
[contentView addSubview:photoImageView]; //为photoImage添加水平约束
NSDictionary *dic_photoImageView=@{@"imageWith":@(kImageSize.width)};
NSArray *photoImageView_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:[photoImageView(imageWith)]" options: metrics:dic_photoImageView views:NSDictionaryOfVariableBindings(photoImageView)];
//为photoImage添加水平居中约束
NSLayoutConstraint *photoImageView_CX=[NSLayoutConstraint constraintWithItem:photoImageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeCenterX multiplier: constant:];
[contentView addConstraints:photoImageView_H];
[contentView addConstraint:photoImageView_CX]; //创建一个textLabel对象
textLabel=[[UILabel alloc]init];
textLabel.translatesAutoresizingMaskIntoConstraints=NO;
textLabel.backgroundColor = [UIColor clearColor];
textLabel.font = [UIFont systemFontOfSize:17.0f];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor colorWithRed:/255.0f green:/255.0f blue:/255.0f alpha:1.0];
[contentView addSubview:textLabel]; //水平添加约束
NSDictionary *dic_textLabel=@{@"LeftMarginRight":@(20.0f)};
NSArray *textLabel_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-LeftMarginRight-[textLabel]-LeftMarginRight-|" options: metrics:dic_textLabel views:NSDictionaryOfVariableBindings(textLabel)];
[contentView addConstraints:textLabel_H]; //创建一个redButton对象
redButton=[[UIButton alloc]initWithFrame:CGRectZero];
redButton.tag=;
redButton.translatesAutoresizingMaskIntoConstraints=NO;
[redButton setTitle:@"马上去投资" forState:UIControlStateNormal];
[redButton setBackgroundColor:kRedButtonNormalColor];
[redButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[redButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[contentView addSubview:redButton]; //为redButton添加水平约束
NSDictionary *dic_redButton=@{@"LeftorRight":@(16.0f)};
NSArray *redButton_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-LeftorRight-[redButton]-LeftorRight-|" options: metrics:dic_redButton views:NSDictionaryOfVariableBindings(redButton)];
[contentView addConstraints:redButton_H]; //把所有控件放在最终的父视图中并添加约束
NSDictionary *bindDic=@{@"photoImageView":photoImageView,@"textLabel":textLabel,@"redButton":redButton};
NSDictionary *dic_constraint = @{@"margin":@(15.0f),@"margin_redButton":@(24.0f),@"imgHeight":@(kImageSize.height),@"textHeight":@(20.0f),@"redButtonHeight":@(44.0f)}; NSString *formatStr = [NSString stringWithFormat:@"V:|-[photoImageView(imgHeight)]-margin-[textLabel(textHeight)]-margin_redButton-[redButton(redButtonHeight)]-|"];
NSArray *constraint_V=[NSLayoutConstraint constraintsWithVisualFormat:formatStr options: metrics:dic_constraint views:bindDic];
[contentView addConstraints:constraint_V]; }
-(void)showInView:(UIView *)baseView andNoDataViewType:(ZSDNoDataViewType)noDataViewType
{
switch (noDataViewType)
{ case ZSDNoDataViewTypeInvestMent:
{
photoImageView.image=[UIImage imageNamed:@"invest_circle_none"];
textLabel.text=@"没有相关记录";
break;
}
case ZSDNoDataViewTypeMyInvest:
{
photoImageView.image=[UIImage imageNamed:@""];
textLabel.text=@"没有相关记录";
break;
}
case ZSDNoDataViewTypeNews:
{
photoImageView.image=[UIImage imageNamed:@"our_news_none"];
textLabel.text=@"没有相关记录";
break;
}
case ZSDNoDataViewTypePlan:
{
photoImageView.image=[UIImage imageNamed:@"reimbursement_plan_none"];
textLabel.text=@"没有正在回款的项目";
break;
}
case ZSDNoDataViewTypeRecord:
{
photoImageView.image=[UIImage imageNamed:@"Invest_record_none"];
textLabel.text=@"没有相关记录";
break;
}
default:
break;
}
//获取contentview更新约束后实际大小
CGSize contentSize=[contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
//添加垂直约束
NSDictionary *dic_contentView = @{@"height":@(contentSize.height)};
NSArray *contentView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[contentView(height)]" options: metrics:dic_contentView views:NSDictionaryOfVariableBindings(contentView)];
NSLayoutConstraint *contentView_CY = [NSLayoutConstraint constraintWithItem:contentView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier: constant:];
[self addConstraints:contentView_V];
[self addConstraint:contentView_CY];
[baseView addSubview:self]; self.translatesAutoresizingMaskIntoConstraints = NO;
NSArray *self_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[self]|" options: metrics: views:NSDictionaryOfVariableBindings(self)];
NSArray *self_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[self]|" options: metrics: views:NSDictionaryOfVariableBindings(self)];
[baseView addConstraints:self_H];
[baseView addConstraints:self_V]; }
//代理
-(void)showInBaseView:(UIView *)baseView andNoDataViewDelegate:(id)delegate andNoDataViewType:(ZSDNoDataViewType)noDataViewType
{
[self setUpNoDataView:noDataViewType];
self.delegate=delegate;
redButton.hidden=noDataViewType==ZSDNoDataViewTypeMyInvest?NO:YES;
[self showInView:baseView andNoDataViewType:noDataViewType];
}
//block回调
-(void)showInBaseView:(UIView *)baseView andNoDataViewType:(ZSDNoDataViewType)noDataViewType andCompeleteHandler:(ZSDNoDataViewCompleteHandler)handler
{
[self setUpNoDataView:noDataViewType];
completeHandler=handler;
redButton.hidden=noDataViewType==ZSDNoDataViewTypeMyInvest?NO:YES;
[self showInView:baseView andNoDataViewType:noDataViewType]; }
//类方法block回调
+(void)showInBaseView:(UIView *)baseView andNoDataViewType:(ZSDNoDataViewType)noDataViewType andCompeleteHandler:(ZSDNoDataViewCompleteHandler)handler
{
ZSDTJNoDataView *noDataView=[[ZSDTJNoDataView alloc]init];
[noDataView setUpNoDataView:noDataViewType];
noDataView->completeHandler=handler;
noDataView->redButton.hidden=noDataViewType==ZSDNoDataViewTypeMyInvest?NO:YES;
[noDataView showInView:baseView andNoDataViewType:noDataViewType]; }
-(void)buttonAction:(UIButton *)sender
{
//使用代理
if (_delegate&&[_delegate respondsToSelector:@selector(noDataView:andButtonClick:)])
{
[_delegate noDataView:self andButtonClick:sender.tag];
}
//使用block调
if (completeHandler)
{
completeHandler(sender.tag);
}
}
@end
#import <UIKit/UIKit.h>
#import "ZSDTJNoDataView.h"
@interface ZSDViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIView *maskView; @end
//
// ZSDViewController.m
// ZSDTJNoDataView
//
// Created by Mac on 14-12-28.
// Copyright (c) 2014年 ZSD. All rights reserved.
// #import "ZSDViewController.h" @interface ZSDViewController ()<ZSDTJNoDataViewDelegate>
{
ZSDTJNoDataView *noDataView;
}
@end @implementation ZSDViewController - (void)viewDidLoad
{
[super viewDidLoad];
noDataView=[[ZSDTJNoDataView alloc]init];
[noDataView showInBaseView:_maskView andNoDataViewType:ZSDNoDataViewTypeMyInvest andCompeleteHandler:^(NSInteger buttonIndex) { NSLog(@"使用回调时候buttonIndex=%d",buttonIndex); }];
[noDataView showInBaseView:_maskView andNoDataViewDelegate:self andNoDataViewType:ZSDNoDataViewTypeMyInvest]; [ZSDTJNoDataView showInBaseView:_maskView andNoDataViewType:ZSDNoDataViewTypeMyInvest andCompeleteHandler:^(NSInteger buttonIndex) { NSLog(@"使用类方法回调时候buttonIndex=%d",buttonIndex);
}];
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
} #pragma mark -ZSDTJNoDataView Delegate
-(void)noDataView:(ZSDTJNoDataView *)noDataView andButtonClick:(NSInteger)selectBtnIndex
{
NSLog(@"使用代理时候selectBtnIndex=%d",selectBtnIndex);
}
@end
自定义uiview 当没有数据的时候 显示自定义的uiview界面的更多相关文章
- 双击CAD对象(具有扩展数据),显示自定义对话框实现方法
转自:Cad人生 链接:http://www.cnblogs.com/cadlife/p/3463337.html 题目:双击CAD对象,显示自定义对话框实现方法 内容粘贴如下: 主要是绑定两个事件: ...
- XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式
本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/ ...
- 判断数据库内容,在页面显示自定义数据case when
判断数据库内容,在页面显示自定义数据 case when...then ...else...end 比如:数据库内容是这样: 通过sql语句判断,数据库的name字段,内容是月桂的,显示嫦娥,其他的显 ...
- DedeCMS中实现在顶层banner中显示自定义登录信息
一.需求描述 dedeCMS自带的模板中有互动中心模块,如下图所示: 由于会员登陆对我来说不是网站的重要模块且默认DedeCMS的会员中心模块的初始化很慢,常会显示“正在载入中,请稍候...”, 所以 ...
- Highcharts属性与Y轴数据值刻度显示Y轴最小最大值
Highcharts 官网:https://www.hcharts.cn/demo/highcharts Highcharts API文档:https://api.hcharts.cn/highcha ...
- iOS:自定义导航栏,随着tableView滚动显示和隐藏
自定义导航栏,随着tableView滚动显示和隐藏 一.介绍 自定义导航栏是APP中很常用的一个功能,通过自定义可以灵活的实现动画隐藏和显示效果.虽然处理系统的导航栏也可以实现,但是这个是有弊端的,因 ...
- HighCharts 图表插件 自定义绑定 时间轴数据
HighCharts 图表插件 自定义绑定 时间轴数据,解决时间轴自动显示数据与实际绑定数据时间不对应问题! 可能要用到的源码片段:http://code.662p.com/list/14_1.htm ...
- 利用动态图层实现数据的实时显示(arcEngine IDynamiclayer)
marine 原文利用动态图层实现数据的实时显示(arcEngine IDynamiclayer) 说明:最近一个项目用到这方面知识,文章主要来至网络,后期会加入自己的开发心得.(以下的代码实例中,地 ...
- 9) drf JWT 认证 签发与校验token 多方式登陆 自定义认证规则反爬 admin密文显示
一 .认证方法比较 1.认证规则图 django 前后端不分离 csrf认证 drf 前后端分离 禁用csrf 2. 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 ...
随机推荐
- jxse2.6在jdk8下,JxtaMulticastSocket存在的问题
JxtaMulticastSocket覆写了java.net.MulticastSocket的bind方法: @Override public void bind(SocketAddress addr ...
- RAID对硬盘的要求及其相关
Raid 0:至少需要两块硬盘,磁盘越多,读写速度越快,没有冗余. Raid 1:只能用两块硬盘,两块硬盘的数据互为镜像(写慢,读快),一块磁盘冗余. Raid 5:至少需要3块硬盘,一块磁盘冗余. ...
- 从输入一个URL到页面呈现,网络上都发生了什么?
归纳一下其中涉及到前端的一些基础知识,主要包括:http协议.web标准.w3c标准等. 这个问题虽然只有两个2个动作:输入URL和呈现页面,但这背后发生了很多"有趣" ...
- springAOP配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 用DependanceProperty做Dynamic换Icon
1:做Icon用Canvas还是DrawingBrush? Canvas的例子:
- 两个ERP 库存调拨
(A) ERP 负责线上销售,公司为扩大规模,发展线下实体 采用另一套ERP(B) A 和B 都是 单独的ERP ,为了使两个ERP 能高效地工作,需开发一个单独衔接模块实现 ,库存的调拨,新品的 ...
- linux环境新增用户和所属组
1.查看用户和组信息命令: 1.1 cat /etc/passwd /etc/passwd 存储有关本地用户的信息. 1)username UID到名称的一种映射,用户名 2)passw ...
- 学习web前端前感
我与IT 不知不觉二十个春夏秋冬过去了,我也从一个小孩变成了大人......然而并没什么卵用!这二十年来一直贴着“菜鸟”这样的标签,自小爱朝抵抗力小的方向走,这陋习至今还蔓延着,让人看来像是怒其不争的 ...
- ThinkSNS插件的使用方法
1.插件包放到/addons/plugin/ 目录下. 2.自定义一个插件钩子:修改/apps/public/Tpl/default/Index/index.html,约在65行左右,添加下面钩子.{ ...
- Java内存区域分析
程序计数器 指令运行的指示器. 每一个线程都有独立的程序计数器,互无影响,我们称这类区域为线程私有的内存. 运行Java方法,计数器记录的是正在运行的虚拟机字节码指令地址;假设运行的是native方法 ...