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.这是动态变化的. 查看 ...
一周排行
  • 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 本篇是触发器专题,有很 ...
  • 易网科技讯 1月12日消息,据彭博社报道,AMD正在寻找一个能取代梅德克,并更好地与英特尔竞争和在新设备推广芯片的CEO.消息人士称,董事会对AMD市场份额下降,并在争取进入平板电脑市场上缺乏进展感到沮丧. 佛罗里达 ...
  •         我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢?        重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完 ...
  • 感谢大家的支持.上周日(3月14日)年后的第一堂课Ajax介绍及Ajax资源封装课程圆满结束.   相关课程资源(PPT.源码.视频)请在下面地址下载http://student.csdn.net/space.php ...
  • 在android开发中使用dialogframent实现对话框是比较支持的方法,因为对屏幕旋转及回退都能有比较好的控制. 自定义的dialogfragment继承DialogFragment,并实现onCreateV ...
  • 一.WHAT--并发访问,阻塞执行 1.1 不使用session 文件index.php: <script type="text/javascript" src="http://c ...
  • 三星GALAXY S4新广告:iPhone5是老人机京华时报讯(记者古晓宇)曾经在广告中讽刺对手产品过时的苹果如今也成为了被嘲讽的对象.昨天记者了解到,在三星最新发布的手机Galaxy S4的电视广告中,在S4众多新 ...
  • 类似于这种:   就是这个框,有属性名字和对应的value编辑.   这个Widget是作为一个QDockWidget被添加到QMainWindow中的.QMainWindow必须要有centralWidget才能添 ...
  • http://www.linuxfromscratch.org/blfs/view/cvs/general/tcl.html tcl http://redis.io/topics/quickstart
  • 使用dedecms的时候,当打开某篇文章的时候,底部会有“上一篇”“下一篇”的链接信息,默认情况下,上下链接信息并没有区分栏目的属性,那么需要实现本栏目内的上下篇,如何实现呢? 答案是修改程序. 修改:include ...