美文网首页iOS学习寒哥管理的技术专题Swift
Swift快速集成下拉刷新和上拉加载更多

Swift快速集成下拉刷新和上拉加载更多

作者: eggswift | 来源:发表于2016-05-11 13:42 被阅读5025次

ESPullToRefresh

ESPullToRefresh是一个非常易于开发者使用的下拉刷新和加载更多组件。通过一个UIScrollView的扩展,可以轻松为UIScrollView的所有子类添加下拉刷新功能。 如果你想定制组件的UI样式,只要实现指定的协议方法即可。 Github地址

如何安装

使用CocoaPods

pod "ESPullToRefresh"

手动安装

git clone https://github.com/eggswift/pull-to-refresh.git
open ESPullToRefresh

开始使用

使用默认样式 效果如下:

example_default.gif

设置默认下拉刷新组件

self.tableView.es_addPullToRefresh {
    [weak self] in
    /// 在这里做刷新相关事件
    /// ...
    /// 如果你的刷新事件成功,设置completion自动重置footer的状态
    self?.tableView.es_stopPullToRefresh(completion: true)
    /// 设置ignoreFooter来处理不需要显示footer的情况
    self?.tableView.es_stopPullToRefresh(completion: true, ignoreFooter: false)
    })
}

设置默认加载更多组件

self.tableView.es_addInfiniteScrolling {
    [weak self] in
    /// 在这里做加载更多相关事件
    /// ...
    /// 如果你的加载更多事件成功,调用es_stopLoadingMore()重置footer状态
    self?.tableView.es_stopLoadingMore()
    /// 通过es_noticeNoMoreData()设置footer暂无数据状态
    self?.tableView.es_noticeNoMoreData()
    })
}

使用自定义样式 效果如下:

example_meituan.gif

注: 加载动画资源来自美团 iOS app。

example_wechat.gif

ESPullToRefresh通过ESRefreshProtocolESRefreshAnimatorProtocol来约束刷新组件的使用,自定义的组件必须遵守这两个协议,并实现协议中的方法。

设置自定义下拉刷新组件

func es_addPullToRefresh(animator animator: protocol<ESRefreshProtocol, ESRefreshAnimatorProtocol>, 
handler: ESRefreshHandler)

设置自定义加载更多组件

func es_addInfiniteScrolling(animator animator: protocol<ESRefreshProtocol, ESRefreshAnimatorProtocol>, 
handler: ESRefreshHandler)

移除方法

func es_removeRefreshHeader()
func es_removeRefreshFooter()

如果在使用中有什么疑问,可以随时@我

相关文章

网友评论

  • _阿南_:ESPullToRefresh 什么时候更新啊。 已经很久没更新了。现在swift已经升级到4.2了。
  • 羊村里的羊:如何更改显示文字呢?
  • ddffsg:你好,问一下,为什么每次下拉刷新完后,tableview会自动上移
    3409608c2b57:@一毫米距离 没有解决,上移时因为楼主没有适配各个系统,ios10需要tableView的frame设置y的偏移量为0,iOS11则需要设置为64才不会上移,但是这时还是有很多其他问题,我已经更换框架了,楼主的框架还不完善,已经弃用了
    一毫米距离:@劍靈 你好 请问您的问题解决了吗 我在ios11上发现了这个问题 ios10是好的 另外在iphonex上好像有点问题 如果scrollView不能滚动的 下拉刷新也不得行 怎么处理呢
    3409608c2b57:你好,你的问题解决了吗,我也遇到这个问题了
  • 高高叔叔:不知道如何添加自定义啊
  • 无情酱油:我现在稍微上拉下就开始动画了,哪里可以设置下 上拉多少距离才开始动画
  • 婉卿容若:我出现了这个问题: 下拉刷新时,还没执行tableView.reloadData(),程序就进入了"tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell"这个方法中,请问下拉时会触发哪些动作
    婉卿容若:问题找到了,自动刷新时候下拉加载更多也被调用了....
  • yytester:很棒:+1:
  • 神奇水滴:uiwebview 下拉刷新一次之後, uiwebview的scrollview就再也無法拖動及下拉刷新了
  • bc2e0ef905d2:大神 我打开直接报错不能编译啊
  • 慢慢好起来呀:我上拉加载更多的时候,会先调用es_addInfiniteScrolling 然后再调用es_addPullToRefresh
    不明白为什么会调用后者
  • JerryMowen:框架很好用.
    但是不知道为什么, 下拉加载这个方法调用不到, 但是上拉刷新是好的
    eggswift:@mowenyyyyy 上拉加载更多是根据contentOffset自动触发的 可以通过es_addInfiniteScrolling(((...) -> (...))?)方法添加。 😄
  • ChinaSwift:谢谢推荐
  • LitterL:看了您的框架 感觉还是很不错的 但是我在使用的时候遇到这些问题
    1、当使用您默认的样式的时候 我不能去修改 pullToRefreshDescription releaseToRefreshDescription loadingDescription 这三者的文字 只能在您内部去修改
    2、不知道您有没有发现 每次刷新完成之后 您都会把它更改为pullToRefreshDescription所显示的内容 如果按中文来着的话 就没有 "加载完成" 这一说了
    :+1: :+1: :+1:
    eggswift:@LitterL 1、框架中的animator主要是为了达到抛砖引玉的效果,让大家能够很容易的通过这个例子去定制自己业务需要的组件。
    2、目前的确有这样一个问题存在~ 我个人觉得既然是加载更多的话,就不需要有加载完成的state,直接insert ui就好了~

本文标题:Swift快速集成下拉刷新和上拉加载更多

本文链接:https://www.haomeiwen.com/subject/uehurttx.html