全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

ios UITableView实现无数据加载占位图片

本文介绍了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小时内与您取得联系。