本文介绍了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
相关文章:
官网网站制作腾讯审核要多久,联想路由器newifi官网
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
小型网站建站如何选择虚拟主机?
建站之星后台管理:高效配置与模板优化提升用户体验
存储型VPS适合搭建中小型网站吗?
网站制作免费,什么网站能看正片电影?
如何获取开源自助建站系统免费下载链接?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站之星如何通过成品分离优化网站效率?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
智能起名网站制作软件有哪些,制作logo的软件?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
高防服务器如何保障网站安全无虞?
建站VPS能否同时实现高效与安全翻墙?
如何快速辨别茅台真假?关键步骤解析
,有什么在线背英语单词效率比较高的网站?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
建站主机SSH密钥生成步骤及常见问题解答?
如何在自有机房高效搭建专业网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
,交易猫的商品怎么发布到网站上去?
专业网站建设制作报价,网页设计制作要考什么证?
如何挑选最适合建站的高性能VPS主机?
Python路径拼接规范_跨平台处理说明【指导】
建站之星如何修改网站生成路径?
建站主机数据库如何配置才能提升网站性能?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
Python如何创建带属性的XML节点
如何选择高性价比服务器搭建个人网站?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
北京的网站制作公司有哪些,哪个视频网站最好?
宁波免费建站如何选择可靠模板与平台?
如何通过老薛主机一键快速建站?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
建站VPS推荐:2025年高性能服务器配置指南
开封网站制作公司,网络用语开封是什么意思?
建站之星如何配置系统实现高效建站?
如何基于PHP生成高效IDC网络公司建站源码?
建站之星2.7模板:企业网站建设与h5定制设计专题
建站之星代理商如何保障技术支持与售后服务?
如何用VPS主机快速搭建个人网站?
制作网站外包平台,自动化接单网站有哪些?
如何通过免费商城建站系统源码自定义网站主题与功能?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
如何打造高效商业网站?建站目的决定转化率
如何在宝塔面板中创建新站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。