当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS实现UITableView数据为空时的提示页面

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

济州岛娱乐89168澳门官方,成都住房公积金,娱乐圈血肉史2

前言

相信对于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 uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网