iOS UITableView 实现上拉及下拉刷新

做iOS开发已经两年多了。最近,在整理以前的代码,找到当时卡壳的一些代码片段,写博客跟大家分享一下。欢迎iOS初学者订阅我的博客,有什么问题可以留言交流。以下正文:
 
 
 
一般说到上拉刷新下拉刷新,很多人可能想到的是一个第三方开源框架EGORefresh,下面说下,如何自己写代码实现。
 
UITableView本身是一个UIScrollView,所以UITableView可以实现UIScrollView的代理方法。上拉和下拉刷新无非是UIScrollView偏移到一定程度调用刷新方法。 实现- (void)scrollViewDidScroll:(UIScrollView *)scrollView代理方法即可。代码如下:
 
 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 假设偏移表格高度的20%进行刷新
    
    if (!_isLoading) { // 判断是否处于刷新状态,刷新中就不执行
        
        // 取内容的高度:
        //    如果内容高度大于UITableView高度,就取TableView高度
        //    如果内容高度小于UITableView高度,就取内容的实际高度
        float height = scrollView.contentSize.height > _tableView.frame.size.height ? _tableView.frame.size.height : scrollView.contentSize.height;
        
        if ((height - scrollView.contentSize.height + scrollView.contentOffset.y) / height > 0.2) {
            // 调用上拉刷新方法
        }
        
        if (- scrollView.contentOffset.y / _tableView.frame.size.height > 0.2) {
            // 调用下拉刷新方法
        }
    }
}
 
具体要实现什么样的刷新效果就在注释位置加上,还可以加上动画效果、菊花进度条之类,看客们自己搞定。
更多相关文章
  • 奇虎360董事长周鸿祎似乎总是在给自己找对头,然后等着仇家寻上门来.虽然每次的恩怨都在口水仗里不了了之,不过这次,周鸿祎似乎躲不过了.6月2日,金山一纸诉状将他告上法庭,索赔金额1200元,要求周鸿祎停止侵权,并在各大网站的微博首页连续7天发表致歉声明,消除影响.次日,周鸿祎表示,360现在已经发展 ...
  • 网络福尔摩斯   大名江春傲   林杨/文   在他的从警生涯中,没有冲锋陷阵的英勇之举,也没有追逃缉凶的惊险历程.电脑,是他守护网络世界安宁的有力武器.   >>网络暗战   数百嫌犯栽在他手里   夜晚,金华市公安局网警支队支队长江春傲办公室的灯经常都是亮着的……在这个没有硝烟的战场 ...
  •   #coding=utf-8 #!/usr/bin/python import sys; print("The command line parameters are : "); for i in range(0, len(sys.argv)) : print str(i) + ...
  • 从文件中读取内容 本节将学习如何从文件中读取内容.如果文件中的内容是以Prolog的语句形式存在的,那么在Prolog中读取这样的文件内容是很容易的.比如文件houses.txt的内容如下: gryffindor. hufflepuff. ravenclaw. slytherin. 下面是Prolo ...
  • jmp short 标号 ; 段内转移,IP 偏移 8 位 jmp near ptr 标号 ; 段内转移,IP 偏移 16 位 jmp far ptr 标号 ; 段间转移,同时更改 CS 和 IP jmp 16 位 reg ; (IP)=(16 位 reg) jmp word ptr 内存单元地址 ...
  • 问:怎样解决mysql连接过多的错误? 答:系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动态变化的. 查看 ...
一周排行
  • 确定的世界 - The Promise's World -- Promise的逻辑以及在Lua中的实现 本文基于如下项目(ES6 Promise in lua v1.0.1): https://github.com/ ...
  • 今天我来尝试修改一下代码,以使它更适合我们实际的研发情况.   首先,我们修改一下代码,让它可读性稍微好一点.(原代码参考上文)   monitor.js var  monitor= (function(){     ...
  • NAME(名称) col - 过滤掉输入中的反向换行符   SYNOPSIS(总览) col [-bfx ] [ Fl l Ar num ]   DESCRIPTION(描述) Col 过滤掉反向(以及半反向)换行符 ...
  • 序言 说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够按时完成手头的工程,商家通过开源软件赚到了钱……,总之是皆大欢喜.然而开源软件或类库的首要缺点就是大多 ...
  • Contest Time Limit: 2/1 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 22 ...
  • 软件设计师考试总结       昨天终于考完了软件设计师考试,准备了近2个多月,现在终于可以松口气了.目测自己考过的可能性比较大,毕竟自己准备的还是比较充分的.        软件设计师考试的考题难度不是很大,但它涉 ...
  • 今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样的方法,所以上网 ...
  • 题目链接 题目要求: Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do ...
  • 在数据库表中,使用索引可以大大提高查询速度.All storage engines support at least 16 indexes per table and a total index length of ...
  • 比赛成绩查询问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 81920 KByte 总提交 : 581            测试通过 : 86  2014 ...