LYEmptyView

此框架是本人在5,6个月前,公司启动新项目的时候,一起开始着手编写的,经过这个项目的验证与考验,不断的进行完善,在此特将这份框架分享出来供大家参考与学习。
github地址:https://github.com/yangli-dev/LYEmptyView

不需要遵循协议,不需要设置代理,不需要实现代理方法,只需这一句代码,就可为一个UITableViwe/UICollectionView集成空白页面占位图。self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];

目录

  • 一 效果展示
  • 二 使用参考示例
        * 1 一行代码集成空内容视图
        * 2 自由选择空内容元素
        * 3 自定义空内容元素
        * 4 自定义元素的UI样式
        * 5 二次封装
        * 6 延迟显示emptyView
        * 7 特殊需求,手动控制emptyView的显示隐藏

一 效果展示

二 使用参考示例

1 一行代码集成空内容视图

//框架方法
self.tableView.ly_emptyView = [LYEmptyView emptyViewWithImageStr:@"noData"titleStr:@"暂无数据,点击重新加载"detailStr:@""];

PS:可对框架进行二次封装,调用更简洁(二次封装方法在下面的示例5中会讲到)

//二次封装方法,调用简洁
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];

完全低耦合,在你的项目中加入这一行代码就可集成
不管项目中是reloadData方法刷UI还是insert、delete等方式刷UI,不需做其他任何操作,只需这一行代码就可实现以下效果

2 自由选择空内容元素

交互事件可选择SEL或block方式
SEL交互事件:
self.tableView.ly_emptyView = [LYEmptyView emptyActionViewWithImageStr:@"noData"titleStr:@"无数据"detailStr:@"请稍后再试!"btnTitleStr:@"重新加载"target:targetaction:action];
block交互事件:
self.tableView.ly_emptyView = [LYEmptyView emptyActionViewWithImageStr:@"noData"titleStr:@""detailStr:@""btnTitleStr:@""btnClickBlock:^{}];
//    imageStr    : 占位图片
//    titleStr    : 标题
//    detailStr   : 详细描述
//    btnTitleStr : 按钮标题                                                         

框架提供四个元素,传入相应元素的字符串即可显示对应元素(按钮的显示前提是传入target,action或btnClickBlock)
可根据项目需求,自由进行组合,如下只展示了部分组合效果

3 自定义空内容元素

特殊情况下,如果空内容状态布局不满足需求时,可进行自定义
通过方法+ (instancetype)emptyViewWithCustomView:(UIView *)customView;
传入一个View 即可创建一个自定义的emptyView

self.tableView.ly_emptyView = [LYEmptyView emptyViewWithCustomView:customView];

4 自定义元素的UI样式

这里自定义UI样式需要很多代码,别担心,在示例5中会讲解二次封装的方式,封装后调用时就只需要一行代码了 ^ _ ^

  //初始化一个emptyViewLYEmptyView *emptyView = [LYEmptyView emptyActionViewWithImageStr:@"noData"titleStr:@"无数据"detailStr:@"请稍后再试!"btnTitleStr:@"重新加载"btnClickBlock:^{}];//元素竖直方向的间距emptyView.subViewMargin = 20.f;//标题颜色emptyView.titleLabTextColor = MainColor(90, 180, 160);//描述颜色emptyView.detailLabTextColor = MainColor(180, 120, 90);//按钮背景色emptyView.actionBtnBackGroundColor = MainColor(90, 180, 160);//设置空内容占位图self.tableView.ly_emptyView = emptyView;

这里只列举了一些常用的属性,更多属性请到LYEmptyView.h查看

5 二次封装

第4小节的示例代码,修改emptyView的样式需要一个个属性单独去改,如果项目中每个界面都这么写就显得很麻烦,而且不易维护
解决办法是对库进行二次封装,二次封装后,对UI样式单独管理,方便维护

1)新建一个类继承自LYEmptyView,例如demo中的MyDIYEmpty
2)重写- (void)prepare 方法,并修改想要改变的元素的UI样式
- (void)prepare{[super prepare];self.titleLabFont = [UIFont systemFontOfSize:25];self.titleLabTextColor = MainColor(90, 180, 160);self.detailLabFont = [UIFont systemFontOfSize:17];self.detailLabTextColor = MainColor(180, 120, 90);self.detailLabMaxLines = 5;self.actionBtnBackGroundColor = MainColor(90, 180, 160);self.actionBtnTitleColor = [UIColor whiteColor];
}

操作上面的两步就可实现对样式的单独管理
调用方法不变,只是调用的类变成了MYDiyEmpty

self.tableView.ly_emptyView = [MYDiyEmpty emptyActionViewWithImageStr:@"noData"titleStr:@"暂无数据"detailStr:@"请稍后再试!"btnTitleStr:@"重新加载"btnClickBlock:^{}];
3)进一步封装显示的元素内容,比如无数据状态图、无网络状态图

在MYDiyEmpty.h定义方法+ (instancetype)diyNoDataEmpty;
在MYDiyEmpty.m实现方法

+ (instancetype)diyNoDataEmpty{return [MyDIYEmpty emptyViewWithImageStr:@"noData"titleStr:@"暂无数据"detailStr:@"请稍后再试!"];
}

经过3步封装,自定义了UI样式,使管理更方便,使调用更简洁
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];


下面的两种示例,属于特殊需求,需要四行代码搞定,调用和MJRefrsh类似,需要先设置样式,然后显示和隐藏

6 延迟显示emptyView

如示例1图,框架自动根据DataSource计算是否显示emptyView,在空页面发起网络请求时,DataSource肯定为空,会自动显示emptyView,有的产品需求可能不希望这样,希望发起请求时暂时隐藏emptyView。
本框架提供了两个方法可实现此需求,两个方法都是scrollView的分类,调用非常方便

 /**一般用于开始请求网络时调用,ly_startLoading调用时会暂时隐藏emptyView当调用ly_endLoading方法时,ly_endLoading方法内部会根据当前的tableView/collectionView的DataSource来自动判断是否显示emptyView*/
- (void)ly_startLoading;/**在想要刷新emptyView状态时调用注意:ly_endLoading 的调用时机,有刷新UI的地方一定要等到刷新UI的方法之后调用,因为只有刷新了UI,view的DataSource才会更新,故调用此方法才能正确判断是否有内容。*/
- (void)ly_endLoading;

*注意点:使用这两个方法,请先将emptyView的autoShowEmptyView属性置为NO,关闭自动显隐

以下是调用示例(具体细节可参考demo中的demo2)

//1.先设置样式
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];
//2.关闭自动显隐(此步可封装进自定义类中,相关调用就可省去这步)
self.tableView.ly_emptyView.autoShowEmptyView = NO;
//3.网络请求时调用
[self.tableView ly_startLoading];
//4.刷新UI时调用(保证在刷新UI后调用)
[self.tableView ly_endLoading];

7 特殊需求,手动控制emptyView的显示隐藏

在某些特殊界面下,有的tableView/collectionView有固定的一些死数据,其它的数据根据网络加载,这时根据以上的示例方法可能达不到这需求。
本框架提供另外的两个方法来解决这个问题。

/**手动调用显示emptyView*/
- (void)ly_showEmptyView;/**手动调用隐藏emptyView*/
- (void)ly_hideEmptyView;

*注意点:使用这两个方法,请先将emptyView的autoShowEmptyView属性置为NO,关闭自动显隐

以下是调用示例(具体细节可参考demo中的demo4)

//1.先设置样式
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];
//2.关闭自动显隐(此步可封装进自定义类中,相关调用就可省去这步)
self.tableView.ly_emptyView.autoShowEmptyView = NO;
//3.显示emptyView
[self.tableView ly_showEmptyView];
//4.隐藏emptyView
[self.tableView ly_hideEmptyView];

欢迎star
github地址:https://github.com/yangli-dev/LYEmptyView

[iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)相关推荐

  1. iOS一行代码调用手机系统震动

    第1步:导入#import "AudioToolbox/AudioToolbox.h" 第2步 : 关键的一行代码: AudioServicesPlaySystemSound(kS ...

  2. iOS一行代码让你的应用中UIScrollView的滑动与侧滑返回并存

    侧滑返回是iOS系统的一个很贴心的功能,特别是在大屏手机上,单手操作的时候去按左上角的返回键特别不方便.当我在使用一个APP的时候,如果控制器不能侧滑返回,我会觉得这个APP十分不友好...这款产品在 ...

  3. iOS一行代码移除子视图,或者layer。iOS获取近八天日期数组

    项目中大家可能都遇到过 需要删除某一个View的所有子View 但是,大家会发现iOS的View提供了一个 removeFromSuperview 的方法 可以将View从父级View上删除 但是,如 ...

  4. iOS一行代码压缩图片大小

    现在基本所有应用都与图片相关联,这就必然涉及到上传下载图片,而用户的流量又迟迟没有被解放,因此图片就不能太大,我们知道iPhone一张照片动辄几M,如果都传原图那流量就会爆炸,粗暴地缩小又会影响图片的 ...

  5. 一行代码集成带负数的自定义键盘

    PGNumberKeyboard 一款非常简单漂亮灵活的自定义数字键盘,可以输入负数,内置了数字验证算法.你不需要在判断输入的小数或者负数是否合法 Installation with CocoaPod ...

  6. PHP一行代码集成雅虎宝贝鱼在线翻译功能 -- JAVAEYE不支持IE8

    今天发现可以这样(*^__^*) 嘻嘻-- 可是只能取单个词组 之间不能有空格 待续 做好了在发布代码 怕被嘲笑啊 今天想把图传上来 结果发现IE8根本就不支持本站的上传功能,上传一个文件往往变成2个 ...

  7. 一行代码取出HTML页面某个按钮的css属性,比如margin

    以SAP Spartacus这个Add 按钮为例: 只需要1行语句: var computedStyle = getComputedStyle(document.getElementsByClassN ...

  8. 一个优雅的占位图解决方案。适用于 UITableView 和 UICollectionView。

    FMListPlaceholder 项目地址:https://github.com/yfming93/FMListPlaceholder 一个优雅的占位图解决方案.适用于 UITableView 和 ...

  9. don't android xml,GitHub - KunMinX/Linkage-RecyclerView: 即使不用饿了么订餐,也请务必收藏好该库! 一行代码即可接入,二级联动订餐列表。...

    真香警告:即使不用饿了么订餐,也请务必收藏好该库! 由来 Linkage-RecyclerView 是一款基于 MVP 架构开发的二级联动列表控件.它是因 "RxJava 魔法师" ...

最新文章

  1. php 无法输出图像,ThinkPHP里无法输出图片 设置响应头
  2. [Unity热更新]04.卸载方式
  3. Node基础: 回调函数 2
  4. oracle按时间要求查询
  5. JS的parseFloat
  6. 基于FPGA的异构计算在多媒体中的应用
  7. ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作!
  8. DocHub v2.3 发布,构建你自己的百度文库
  9. windows 网络编程报错 error LNK2019
  10. [转载] python中随机数生成函数_python中seed随机函数如何生成随机数?
  11. 依赖 netty spring_面试官:如何写好一个 Spring 组件?懵圈!
  12. 个性化头像生成——微信小程序开发
  13. 解决 微信小程序 input错位
  14. C++计算两平面之间的夹角
  15. 必得沾福气卡两张,可沾花花卡、敬业福。(扫福攻略、扫福技巧)
  16. React+Antd 无插件 实现多个输入框验证码功能 + 倒计时(附完整代码)
  17. 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案
  18. Android性能优化之使用线程池处理异步任务
  19. T端带配置文件的魔兽世界BOSS被杀世界公告
  20. 记录一次腾讯实习投递经历(一)

热门文章

  1. 回溯算法经典案例 1 ——N皇后 Java
  2. Torrent Freak 点评十大 Torrent 站点 BTbt 站点
  3. 西门子S7-1500 PLC项目案例,一步一步教会你
  4. 远瑞通读卡器c#对接说明
  5. 自己觉得喜欢的2个项目,慢慢进步吧,呵呵
  6. PTA——出租车计价
  7. h5学习笔记之表单类型与属性
  8. sql查询当天交易总额最大的用户信息_京东用户行为数据分析(SQL)
  9. WINUI3开发笔记 生成提示This version of Project Reunion requires WinRT.Runtime.dll version 1.3 or
  10. 在linux系统中 通过使用shell,linux系统中的shell和vi编辑器应用详细介绍