iOS实现UITableView数据为空时的提示页面_IOS

前言

相信对于iOS开发者们来说,在开发过程中,经常用UITableView,一定会遇到数据为空的情况,这时需要在空页面上放一个图片和一行文字提示数据为空,下面整理了两种方法来实现这个功能。

第一个是继承UITableView,在新类中集成图片和文字

#import <UIKit/UIKit.h>
#import "Const.h"

@interface WFEmptyTableView : UITableView

@property (nonatomic, assign) BOOL showEmptyTipView; // 是否显示背景提示文字
@property (nonatomic, assign) NSInteger vOffset;
@property (nonatomic, copy) NSString *tipString;  // 提示文字
@property (nonatomic, copy) NSString *tipImageName; // 提示图片

@end

具体实现

#import "WFEmptyTableView.h"

@implementation WFEmptyTableView {
 UIView *_customBackView;
 UIImageView *_tipImageView;
 UILabel *_label;
 CGRect _imageFrame;
 CGRect _labelFrame;
 double _scale;
}

- (WFEmptyTableView *)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
 self = [super initWithFrame:frame style:style];
 if (self) {
  [self setupViews];
 }
 return self;
}

- (void)setupViews {
 _customBackView = [[UIView alloc] initWithFrame:self.frame];
 _customBackView.backgroundColor = [UIColor yellowColor];

 _tipImageView = [[UIImageView alloc] initWithFrame:CGRectMake((kScreenWidth-200/2)/2, self.frame.size.height/3, 200/2, 200/2)];
 [_customBackView addSubview:_tipImageView];
 _imageFrame = _tipImageView.frame;

 _label = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_tipImageView.frame), kScreenWidth, 100)];

 _label.backgroundColor = [UIColor clearColor];
 _label.textAlignment = NSTextAlignmentCenter;
 _label.textColor = [UIColor lightGrayColor];
 _label.font = [UIFont systemFontOfSize:16];
 _label.lineBreakMode = NSLineBreakByCharWrapping;
 _label.numberOfLines = 0;
 [_customBackView addSubview:_label];
 _labelFrame = _label.frame;

}

- (void)setShowEmptyTipView:(BOOL)showEmptyTipView {
 _showEmptyTipView = showEmptyTipView;
 if (showEmptyTipView) {
  [self addSubview:_customBackView];
 } else {
  [_customBackView removeFromSuperview];
 }
}

- (void)setTipString:(NSString *)tipString {
 _tipString = tipString;

 NSMutableAttributedString * attributedString1 = [[NSMutableAttributedString alloc] initWithString:tipString];
 NSMutableParagraphStyle * paragraphStyle1 = [[NSMutableParagraphStyle alloc] init];
 [paragraphStyle1 setLineSpacing:15];
 [paragraphStyle1 setAlignment:NSTextAlignmentCenter];
 [attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle1 range:NSMakeRange(0, [tipString length])];
 [_label setAttributedText:attributedString1];

 [self resetFrame];
}

- (void)setTipImageName:(NSString *)tipImageName {
 _scale = 1;
 UIImage *image = [UIImage imageNamed:tipImageName];
 _scale = image.size.height*1.0 / image.size.width;
 _tipImageView.image = image;

 if (isnan(_scale)) {
  _scale = 1;
 }
 [self resetFrame];
}

- (void)setVOffset:(NSInteger)vOffset {
 _label.frame = CGRectMake(CGRectGetMinX(_label.frame), CGRectGetMinY(_label.frame)+vOffset, CGRectGetWidth(_label.frame), CGRectGetHeight(_label.frame));
 _tipImageView.frame = CGRectMake(CGRectGetMinX(_tipImageView.frame), CGRectGetMinY(_tipImageView.frame)+vOffset, CGRectGetWidth(_tipImageView.frame), CGRectGetHeight(_tipImageView.frame));
}

- (void)resetFrame {
 _tipImageView.frame = CGRectMake(0, CGRectGetMinY(_tipImageView.frame), 150, 150 * _scale);
 _tipImageView.center = CGPointMake(kScreenWidth / 2.0, _tipImageView.center.y);

 _label.frame = CGRectMake(CGRectGetMinX(_label.frame), CGRectGetMaxY(_tipImageView.frame), CGRectGetWidth(_label.frame), CGRectGetHeight(_label.frame));
}

@end

还有一种方法,是用Category

#import <UIKit/UIKit.h>

@interface UITableView (WFEmpty)

@property (nonatomic, strong, readonly) UIView *emptyView;

-(void)addEmptyViewWithImageName:(NSString*)imageName title:(NSString*)title;

@end

具体实现

#import "UITableView+WFEmpty.h"
#import <objc/runtime.h>

static char UITableViewEmptyView;

@implementation UITableView (WFEmpty)

@dynamic emptyView;

- (UIView *)emptyView
{
 return objc_getAssociatedObject(self, &UITableViewEmptyView);
}

- (void)setEmptyView:(UIView *)emptyView
{
 [self willChangeValueForKey:@"HJEmptyView"];
 objc_setAssociatedObject(self, &UITableViewEmptyView,
        emptyView,
        OBJC_ASSOCIATION_ASSIGN);
 [self didChangeValueForKey:@"HJEmptyView"];
}

-(void)addEmptyViewWithImageName:(NSString*)imageName title:(NSString*)title
{
 if (!self.emptyView)
 {
  CGRect frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
  UIImage* image = [UIImage imageNamed:imageName];
  NSString* text = title;

  UIView* noMessageView = [[UIView alloc] initWithFrame:frame];
  noMessageView.backgroundColor = [UIColor clearColor];

  UIImageView *carImageView = [[UIImageView alloc] initWithFrame:CGRectMake((frame.size.width-image.size.width)/2, 60, image.size.width, image.size.height)];
  [carImageView setImage:image];
  [noMessageView addSubview:carImageView];

  UILabel *noInfoLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 160, frame.size.width, 20)];
  noInfoLabel.textAlignment = NSTextAlignmentCenter;
  noInfoLabel.textColor = [UIColor lightGrayColor];
  noInfoLabel.text = text;
  noInfoLabel.backgroundColor = [UIColor clearColor];
  noInfoLabel.font = [UIFont systemFontOfSize:20];
  [noMessageView addSubview:noInfoLabel];

  [self addSubview:noMessageView];

  self.emptyView = noMessageView;
 }

}

@end

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
, uitableview
, ios开发uitableview
空数据
系统维护提示页面实现、ios引导页面的实现、ios app 引导页面实现、ios 通知实现页面跳转、ios代码实现页面跳转,以便于您获取更多的相关知识。

时间: 2024-08-08 02:17:13

iOS实现UITableView数据为空时的提示页面_IOS的相关文章

esult et-关于ResultSet读取数据为空时问题

问题描述 关于ResultSet读取数据为空时问题 想请教一下,jsp我用ResultSet对象(rs)读数据库记录 有数据的话没问题,但如果数据库0条数据,就会直接出现无效游标状态错误,我下面的什么If(rs==null).rs.next()这些都不会执行,Debug就是在查询那句直接报错,后面都不运行了.怎么处理这个问题?

某个页面用Javascript window.open打开另个页面填写数据提交关闭时刷新父页面,父页面DropDownList控件在绑定刚新添的数据怎么做?

问题描述 TEMP1.aspx页面有个DropDownList控件初始的时候邦定数据,后面有个按钮点击用JavaScirpwindow.open()方法打开TEMP2.aspx页面,填写数据后提交保存关闭,TEMP1.aspx页面的DropDownList控件再重新邦定,把刚填的数据显示出来.怎么做,谢谢大家给个好办法! 解决方案 解决方案二:在JavaScirpwindow.open()把窗口的模式设为无弹出式对话框的模式,保存关闭后temp1.aspx会刷新这样再重新绑定DropDownLi

excel单元格为空时怎么显示我们的警示标志防止漏掉数据

  在使用excel编辑数据的时候有些单元格是必须要填写的,所以为了防止漏填,或者忘记填写的情况.我们通常都会给这些单元格设置警示的标志,一般情况我们都是将其填充颜色以提醒我们.那么excel单元格为空时怎么显示我们的警示标志防止漏掉数据?下面小编就为大家介绍一下,一起来看看吧! 设置的流程 第一步打开我们所要进行设置修改的excel表格. 第二步我们可以看到打开的表格的各个单元格都是属于必须填写的部分,否则一旦钱的数目打错了,或者打到了别人的账户上是一件十分麻烦的事.小编就将所有的必须填写的单

服务端无法接收到数据-iOS 服务端java接收到数据为空

问题描述 iOS 服务端java接收到数据为空 我们的服务端,忽然无法接收到我post 传过去的json数据,以前好几个月都没问题,我的代码大致如下,求大神解救 self.manager = [AFHTTPRequestOperationManager manager]; self.manager.responseSerializer = [AFJSONResponseSerializer serializer]; self.manager.requestSerializer=[AFJSONRe

listview-当数据库为空的时候,用lisView动态加载数据空时出现的闪退问题

问题描述 当数据库为空的时候,用lisView动态加载数据空时出现的闪退问题 当我用ListView动态加载数据库中的文件时,当数据库中确实存在文件时,一切正常,能够正常显示. 但是当数据库为空或者吗,没有新建数据库的时候,用ListView加载时,就会出现闪退的问题. 求大神支招,怎么解决.附上我的获取数据库中数据的方法 ```private ArrayList getData(){ SQLiteDatabase db =openOrCreateDatabase("text.db",

jquery easyui datagrid 某列的数据为0或空时,这个列不显示

问题描述 jquery easyui datagrid 某列的数据为0或空时,这个列不显示 jquery easyui datagrid 某列的数据为0或空时,怎么让这个列不显示. 解决方案 问题是你所有行的此列都是0没有..要是有些列不是0那不是也被隐藏了, 如果是只要有0或者为空就隐藏,自己遍历下返回的数据,然后调用hideColumn执行隐藏此列$('#dg').datagrid('hideColumn','列名称') 解决方案二: jquery easyui datagrid 列宽按百分

asp.net-如何解决数据字段为空时sqldatasource找不到相应数据值的问题

问题描述 如何解决数据字段为空时sqldatasource找不到相应数据值的问题 两个表,表一包含有表二ID字段且原数据为空值,表二有数据,在利用detailsview控件中呈现表一,其字段ID以表二ID对应名称呈现,ID字段利用dropdownlist控件,此控件数据源是sqldatasource控件.运行时如果有对应数据则没问题,否则出现错误,请问如何解决? 解决方案 绑定这种东西刚开始用觉得很简单,但是它牺牲了灵活性,更糟糕的是,你熟练掌握了它解决不了什么问题,你想解决问题还是得从头学起.

iOS使用UITableView实现的富文本编辑器

本文讲的是iOS使用UITableView实现的富文本编辑器,公司最近做一个项目,其中有一个模块是富文本编辑模块,之前没做个类似的功能模块,本来以为这个功能很常见应该会有已经造好的轮子,或许我只要找到轮子,研究下轮子,然后修改打磨轮子,这件事就八九不离十了.不过,还是 too young to simple 了,有些事,还是得自己去面对的,或许这就叫做成长,感觉最近一年,对于编程这件事,更多了一点热爱,我感觉我不配过只会复制粘贴代码的人生,编程需要有挑战.所以,遇到困难,保持一份正念,路其实就在

iOS开发系列--数据存取

概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储,包括偏好设置其本质都是存储为文件,只是说归档或者plist文件存储可以选择保存到沙盒中,而偏好设置系统已经规定只能保存到沙盒的Library/Preferences目录.当然,文件存储并不作为本文的重点内容.本文重点还是说数据库存储,做过数据库开发的朋友应该知道,可以通过SQL直接访问数据库,也可以