python tableview没有数据时的占位处理_iOS造轮子系列-TableView空数据显示占位图片 runtime实现...
大多数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实现...相关推荐
- python抓取数据时失败_爬取数据缺失的补坑,Python数据爬取的坑坑洼洼如何铲平...
渣渣业余选手讲解,关于爬取数据缺失的补坑,一点点关于Python数据爬取的坑坑洼洼如何铲平,个人的一些心得体会,还有结合实例的数据缺失的补全,几点参考,仅供观赏,如有雷同,那肯定是我抄袭的! 在使用P ...
- python逐行读取数据时出现错误_python如何逐行读取数据
在实际开发的过程中,文件读写也很重要,下面说一下python如何逐行读取文件. 如果程序要读取行,通常只能用文本方式来读取,道理很简单,只有文本文件才有行的概念,二进制文件没有所谓行的概念. 文件对象 ...
- python逐行读取数据时出现错误_Python利用逐行读取readline()打印出现空行的解决办法...
Python Python开发 Python语言 Python利用逐行读取readline()打印出现空行的解决办法 在利用readline()进行逐行读取文件的时候,我们一般使用以下程序: f=op ...
- python如何读取数据时出现错误_python读取excel数据报xlrd.biffh.XLRDError错误原因,,比如说我要读取 http...
python读取excel数据报xlrd.biffh.XLRDError错误原因,,比如说我要读取 http 比如说我要读取 http://basic.10jqka.com.cn/600383/xls ...
- python抓取数据时失败_python网页爬虫之列车时刻表的抓取(5)-错误数据的处理
抓取了99%的数据还剩一点点瑕疵要处理掉. 在脚本的运行日志里不和谐的一段: 05-29 18:14 transchedule INFO train number 5611 processed 05- ...
- python如何读取数据时出现错误_连接数据库时出现的错误,怎样解决??
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Traceback (most recent call last): File "src\pymssql.pyx", line 636 ...
- python如何读取数据时出现错误_在python3中,关于redis读取数据带有‘b’的问题...
在python3中,关于redis读取数据带有'b'的问题 #encoding=utf-8 from redis import * #读取数据 d1=input("您输入的数据是:" ...
- python抓取数据时失败_python爬取页面元素失败
coursera上有不少经典课程值得收藏,于是想着把课程资源离线下来.就用requests和BeautifulSoup抓取课程资源页,分析资源链接,然后用curl批量下载.一些都很顺利,除了一个细节上 ...
- Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题
1.被这个问题折腾了一上午终于解决了,再网上看到有用 string.replace(u'\xa0',u' ') 替换成空格的,方法试了没用. 后来发现 要在open的时候加utf-8才解决问题. 以 ...
最新文章
- java linkedlist二维,如何在Java中制作二维LinkedList?
- linux 防火墙iptables简明教程
- 怎么样让body、div占满整个浏览器的窗口
- 为什么德国制造让人那么放心
- 热烈庆祝AC70道题
- 深度学习-Tensorflow2.2-tf.data输入模块{2}-tf.data基础用法-09
- 红外传感器型号和参数_红外传感器参数|热释电红外传感器参数
- Spring AOP(三)--XML方式实现
- python无法调用安装的包_无法在Windows 10上使用python2.7/MINGW安装pyslalib软件包
- 【文献阅读笔记】(1):一篇手把手教你做GWAS的Guideline文献解读
- JavaScript常见的六种继承方式
- STM32:FSMC驱动TFTLCD(ST7789)
- Amazon Dynamo论文中文版
- java读取execle
- 开学季哪些数码产品值得一看?开学季推荐五款值得入手的好物
- ListView和条目点击事件、条目长按事件
- python中encoding是什么意思_python中encoding是什么意思
- Element2 el-tooltip 滚动时 不消失
- React 系列 - 前言
- 汉字无法被计算机替代作文,人生的“捷径”无法被取代作文
热门文章
- 教你用 Python 自制简单版《我的世界》
- 【图】高考前最后一篇博客(如果你是常客,就点开看看吧!)
- 陀螺专栏势力榜——月榜(5.1-5.31)
- 管理工具导入CSV文件,中文数据乱码的解决办法。
- 酷乐萌机器人_QQ飞车手游【萌宠攻略】激萌无比,未来机器人穿越而至
- 数学软件四大家族——Maple、MATLAB、MathCAD和Mathematica优缺点比较
- 2022年了,你还没搞清楚箭头函数与普通函数的区别嘛?
- python如何将txt文本导入excel实例
- 小程序获取sessionkey_微信小程序 获取session_key和openid的实例
- 初步学习MOOS-ivp