DZNEmptyDataSet

默认情况下,如果你的表视图是空的,屏幕上什么也不会显示,就是一片空白,它给用户的体验不是很好,于是DZNEmptyDataSet出现了(github.com/dzenbot/DZNEmptyDataSet    v1.8.1)。

正当我开开心心的接入了这个库以后,被产品告知在此界面下也要支持下拉刷新。。。

于是我就去看了下源码,这篇文章重点不是对DZNEmptyDataSet的详细解析,而是从这个源码得到的收获。

客观的说,跟那些动不动几十个类的第三方库相比,这个库还是比较简单的。首先运用runtime给UIScrollView的分类绑定属性emptyDataSetSource和emptyDataSetDelegate,这个方法很多第三方库都会使用。

这个库的原理是给UIScrollView写了个分类EmptyDataSet。它的实现主要是通过4个类来完成,DZNWeakObjectContainer,DZNConstraintBasedLayoutExtensions,DZNEmptyDataSetView,EmptyDataSet。其中DZNEmptyDataSetView,EmptyDataSet是重点。收获就是以后实现功能时可以在一个.m文件中构建多个类,每个类封装单独的功能,使逻辑结构清晰合理。这个类的关键方法是- (void)dzn_reloadEmptyDataSet,这个类通过runtime往特定的UITableView和UICollectionView的reloadData方法实现中注入了dzn_reloadEmptyDataSet,在原本的reloadData之前调用了dzn_reloadEmptyDataSet。亮点是运用可变字典_impLookupTable储存已经注入过的方法,防止重复注入出现bug。

补上DZNEmptyDataSet支持下拉刷新的代码

1.首先是

#pragma mark - DZNEmptyDataSetDelegate

- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView

{

return YES;

}

2.然后是

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

      UIView *firstView = scrollView.subviews[0];

      if ([firstView isKindOfClass:NSClassFromString(@"DZNEmptyDataSetView")]) {

     /*

    发送网络请求的代码(略)

    */

    // 显示菊花,类似于mjrefresh的下拉刷新效果。

   self.activityIndicatorView.centerY = 100;

   [self.activityIndicatorView startAnimating];

     }

}

先将就着看,有空我改成markdown排版

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,809评论 4 61
  • GitHub: DZNEmptyDataSet star: 11k 注:以下内容来源于官方源码、 README 文...
    独木舟的木阅读 42,346评论 52 188
  • 1.单例模式单例模式是一种常用的设计模式,对于一个单例类,必须保证任意时刻只有一个单例对象,并且自行实例化该对象,...
    亦晴工作室阅读 530评论 0 0
  • 如果你在健身的时候出现头晕、头昏或头痛,还有脸色苍白、气喘、恶心、呕吐,肌肉抽筋等症状,在排除疾病的情况下,可能有...
    蓝柒柒v阅读 1,501评论 0 1
  • github托管项目遇到的问题 http://jingyan.baidu.com/article/ce436649...
    CoderZNB阅读 316评论 0 0

友情链接更多精彩内容