大多数app刷新tableView的时候, 如果tabview没有数据, 则会显示占位图片, 这个怎么做呢? 我想到很多种方案:

1.使用-(void)loadView方法, 根据是否有数据加载不同的视图

2.在基类的TabviewController中监听当前控制器存放数据的数组,如果数组有值则刷新, 如果没有值则在上面盖一个视图显示图片

3.hook Tabview的reloadData方法, 根据dataSource的数据来判断是否显示图片

前两种方法耦合性较高一些, 这里我使用第三种方法演示一遍, 仅给一些人提供一些思路

效果.gif

写一个UITableView的分类

@interface UITableView (placeholder)

/* 占位图 */

@property (nonatomic, strong) UIView *placeHolderView;

@end

#import "UITableView+placeholder.h"

#import

@implementation NSObject (swizzle)

+ (void)swizzleInstanceSelector:(SEL)originalSel

WithSwizzledSelector:(SEL)swizzledSel

{

Method originMethod = class_getInstanceMethod(self, originalSel);

Method swizzedMehtod = class_getInstanceMethod(self, swizzledSel);

BOOL methodAdded = class_addMethod(self, originalSel, method_getImplementation(swizzedMehtod), method_getTypeEncoding(swizzedMehtod));

if (methodAdded) {

class_replaceMethod(self, swizzledSel, method_getImplementation(originMethod), method_getTypeEncoding(originMethod));

}else{

method_exchangeImplementations(originMethod, swizzedMehtod);

}

}

@end

@implementation UITableView (placeholder)

+ (void)load

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

[self swizzleInstanceSelector:@selector(reloadData) WithSwizzledSelector:@selector(gy_reloadData)];

});

}

- (void)setPlaceHolderView:(UIView *)placeHolderView

{

objc_setAssociatedObject(self, @selector(placeHolderView), placeHolderView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

- (UIView *)placeHolderView

{

return objc_getAssociatedObject(self, @selector(placeHolderView));

}

- (void)gy_reloadData

{

[self gy_checkEmpty];

[self gy_reloadData];

}

- (void)gy_checkEmpty

{

BOOL isEmpty = YES;

id src = self.dataSource;

NSInteger sections = 1;

if ([src respondsToSelector:@selector(numberOfSectionsInTableView:)]) {

sections = [src numberOfSectionsInTableView:self];

}

for (int i = 0; i < sections; i++) {

NSInteger rows = [src tableView:self numberOfRowsInSection:i];

if (rows) {

isEmpty = NO;

}

}

if (isEmpty) {

[self.placeHolderView removeFromSuperview];

[self addSubview:self.placeHolderView];

}else{

[self.placeHolderView removeFromSuperview];

}

}

则使用如下: 下面的GYNoDataView就是自定义的视图(在没有数据的时候显示)

_tableView.placeHolderView = [[GYNoDataView alloc] initWithFrame:self.view.bounds image:[UIImage imageNamed:@"no_data"] viewClick:^{

NSLog(@"点击了没有更多数据的图片");

}];

[_tableView reloadData];

python tableview没有数据时的占位处理_iOS造轮子系列-TableView空数据显示占位图片 runtime实现...相关推荐

  1. python抓取数据时失败_爬取数据缺失的补坑,Python数据爬取的坑坑洼洼如何铲平...

    渣渣业余选手讲解,关于爬取数据缺失的补坑,一点点关于Python数据爬取的坑坑洼洼如何铲平,个人的一些心得体会,还有结合实例的数据缺失的补全,几点参考,仅供观赏,如有雷同,那肯定是我抄袭的! 在使用P ...

  2. python逐行读取数据时出现错误_python如何逐行读取数据

    在实际开发的过程中,文件读写也很重要,下面说一下python如何逐行读取文件. 如果程序要读取行,通常只能用文本方式来读取,道理很简单,只有文本文件才有行的概念,二进制文件没有所谓行的概念. 文件对象 ...

  3. python逐行读取数据时出现错误_Python利用逐行读取readline()打印出现空行的解决办法...

    Python Python开发 Python语言 Python利用逐行读取readline()打印出现空行的解决办法 在利用readline()进行逐行读取文件的时候,我们一般使用以下程序: f=op ...

  4. python如何读取数据时出现错误_python读取excel数据报xlrd.biffh.XLRDError错误原因,,比如说我要读取 http...

    python读取excel数据报xlrd.biffh.XLRDError错误原因,,比如说我要读取 http 比如说我要读取 http://basic.10jqka.com.cn/600383/xls ...

  5. python抓取数据时失败_python网页爬虫之列车时刻表的抓取(5)-错误数据的处理

    抓取了99%的数据还剩一点点瑕疵要处理掉. 在脚本的运行日志里不和谐的一段: 05-29 18:14 transchedule INFO train number 5611 processed 05- ...

  6. python如何读取数据时出现错误_连接数据库时出现的错误,怎样解决??

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Traceback (most recent call last): File "src\pymssql.pyx", line 636 ...

  7. python如何读取数据时出现错误_在python3中,关于redis读取数据带有‘b’的问题...

    在python3中,关于redis读取数据带有'b'的问题 #encoding=utf-8 from redis import * #读取数据 d1=input("您输入的数据是:" ...

  8. python抓取数据时失败_python爬取页面元素失败

    coursera上有不少经典课程值得收藏,于是想着把课程资源离线下来.就用requests和BeautifulSoup抓取课程资源页,分析资源链接,然后用curl批量下载.一些都很顺利,除了一个细节上 ...

  9. Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题

    1.被这个问题折腾了一上午终于解决了,再网上看到有用  string.replace(u'\xa0',u' ') 替换成空格的,方法试了没用. 后来发现 要在open的时候加utf-8才解决问题. 以 ...

最新文章

  1. java linkedlist二维,如何在Java中制作二维LinkedList?
  2. linux 防火墙iptables简明教程
  3. 怎么样让body、div占满整个浏览器的窗口
  4. 为什么德国制造让人那么放心
  5. 热烈庆祝AC70道题
  6. 深度学习-Tensorflow2.2-tf.data输入模块{2}-tf.data基础用法-09
  7. 红外传感器型号和参数_红外传感器参数|热释电红外传感器参数
  8. Spring AOP(三)--XML方式实现
  9. python无法调用安装的包_无法在Windows 10上使用python2.7/MINGW安装pyslalib软件包
  10. 【文献阅读笔记】(1):一篇手把手教你做GWAS的Guideline文献解读
  11. JavaScript常见的六种继承方式
  12. STM32:FSMC驱动TFTLCD(ST7789)
  13. Amazon Dynamo论文中文版
  14. java读取execle
  15. 开学季哪些数码产品值得一看?开学季推荐五款值得入手的好物
  16. ListView和条目点击事件、条目长按事件
  17. python中encoding是什么意思_python中encoding是什么意思
  18. Element2 el-tooltip 滚动时 不消失
  19. React 系列 - 前言
  20. 汉字无法被计算机替代作文,人生的“捷径”无法被取代作文

热门文章

  1. 教你用 Python 自制简单版《我的世界》
  2. 【图】高考前最后一篇博客(如果你是常客,就点开看看吧!)
  3. 陀螺专栏势力榜——月榜(5.1-5.31)
  4. 管理工具导入CSV文件,中文数据乱码的解决办法。
  5. 酷乐萌机器人_QQ飞车手游【萌宠攻略】激萌无比,未来机器人穿越而至
  6. 数学软件四大家族——Maple、MATLAB、MathCAD和Mathematica优缺点比较
  7. 2022年了,你还没搞清楚箭头函数与普通函数的区别嘛?
  8. python如何将txt文本导入excel实例
  9. 小程序获取sessionkey_微信小程序 获取session_key和openid的实例
  10. 初步学习MOOS-ivp