ios UITableView实现无数据加载占位图片
发布时间 - 2026-01-11 02:35:19 点击率:次本文介绍了ios UITableView实现无数据占位图片,分享给大家,具体如下:

国际惯例,上效果图
该效果的实现主要是使用runtime的交叉方法实现,将tableView的reloadData与自定义的kk_reloadData交换。新建tableView的Category。
交换方法主要代码
+ (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);
}
}
交换reloadData
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[self swizzleInstanceSelector:@selector(reloadData) WithSwizzledSelector:@selector(kk_reloadData)];
});
}
kk_reloadData方法,先检查是否有数据,再次kk_reloadData方法此时已使用runtime的交换方法则则实际上调用的是系统的reloadData方法。
- (void)kk_reloadData {
[self kk_checkEmpty];
[self kk_reloadData];
}
kk_checkEmpty方法
- (void)kk_checkEmpty {
BOOL isEmpty = YES;
id<UITableViewDataSource> 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) {//数据为空,在这里添加视图
}else{//数据不为空,在这里一处视图
}
}
为了降低代码的侵入,可以给tableView动态添加一个View属性即是占位图视图。
@property (nonatomic, strong) UIView *placeHolderView;
- (void)setPlaceHolderView:(UIView *)placeHolderView {
objc_setAssociatedObject(self, @selector(placeHolderView), placeHolderView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (UIView *)placeHolderView {
return objc_getAssociatedObject(self, @selector(placeHolderView));
}
kk_checkEmpty的
if (isEmpty) {//数据为空,在这里添加视图
}else{//数据不为空,在这里一处视图
}
修改为
if (isEmpty) {
[self.placeHolderView removeFromSuperview];
[self addSubview:self.placeHolderView];
}else{
[self.placeHolderView removeFromSuperview];
}
以后使用的时候只需设置tableView的placeHolderView属性即可
_tableView.placeHolderView = [[UIView alloc] init];
打完收工
github地址: https://github.com/wuzaozhou/UITableView-placeholder
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# ios
# 无数据占位图片
# 占位图片
# 数据加载占位
# IOS开发中加载大量网络图片优化方法
# iOS之加载Gif图片的方法
# ios通过SDWebImage实现图片加载时的渐变效果
# 如何在iOS中高效的加载图片详解
# 在这里
# 为空
# 一处
# 的是
# 只需
# 给大家
# 自定义
# 即是
# 打完
# 大家多多
# 主要是
# 无数据
# originMethod
# Method
# class_getInstanceMethod
# swizzedMehtod
# SEL
# swizzleInstanceSelector
# originalSel
# swizzledSel
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
如何快速生成ASP一键建站模板并优化安全性?
网站图片在线制作软件,怎么在图片上做链接?
详解Android图表 MPAndroidChart折线图
5种Android数据存储方式汇总
如何确认建站备案号应放置的具体位置?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
PythonWeb开发入门教程_Flask快速构建Web应用
油猴 教程,油猴搜脚本为什么会网页无法显示?
微信推文制作网站有哪些,怎么做微信推文,急?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
如何在阿里云部署织梦网站?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel如何使用Blade模板引擎?(完整语法和示例)
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
三星网站视频制作教程下载,三星w23网页如何全屏?
如何快速生成凡客建站的专业级图册?
微信小程序 input输入框控件详解及实例(多种示例)
南京网站制作费用,南京远驱官方网站?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
如何在阿里云香港服务器快速搭建网站?
Mybatis 中的insertOrUpdate操作
智能起名网站制作软件有哪些,制作logo的软件?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
移动端脚本框架Hammer.js
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel如何实现API资源集合?(Resource Collection教程)
javascript中对象的定义、使用以及对象和原型链操作小结
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Python制作简易注册登录系统
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何为不同团队 ID 动态生成多个非值班状态按钮
Android okhttputils现在进度显示实例代码
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
,在苏州找工作,上哪个网站比较好?
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
js实现获取鼠标当前的位置
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
b2c电商网站制作流程,b2c水平综合的电商平台?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何在阿里云购买域名并搭建网站?
php结合redis实现高并发下的抢购、秒杀功能的实例
如何在腾讯云服务器快速搭建个人网站?
创业网站制作流程,创业网站可靠吗?
黑客如何利用漏洞与弱口令入侵网站服务器?

