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.这是动态变化的. 查看 ...
一周排行
  • 打开shell 首先启动服务端mongod --dbpath d:\app\mongodata 然后打开shell:mongo localhost:27017 默认是以test用户操作,我们可以通过mongo loc ...
  • 1.mysql默认情况下是否区分大小写,使用show Variables like '%table_names'查看lower_case_table_names的值,0代表区分,1代表不区分.   2.mysql对于 ...
  • A relational database, like mysql, provides transactions to wrap several operations in one unit, make them a ...
  • 昨日下午3时18分,上海站北广场春运火车票大卖场,大学生小邓在窗口排队买不到票的情况下,急忙打开笔记本电脑,然而却 登录不了铁路客户服务中心"12306"购票网站.早报记者 沈靓 图早报记者 沈靓 ...
  • 此书获誉无数,第一版没看过,直接看的第二版,然后大致看了一眼作者提到的和第一版的区别: 1.C++语言方面的最新进展,也就是C++ 11的标准:第八代主机游戏的架构,XBOX ONE和PS4.想当初,非C++项目不碰 ...
  • AspectJ 中科永联高级技术培训中心(www.itisedu.com)       AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Ja ...
  • 转自:http://blog.sina.com.cn/s/blog_62a594f70100ff1b.html +++++++++++++++++++++++++++++++++++++++++++++++++++ ...
  • 一.弹出提示框: 连接  function disp_prompt()  {  var name=prompt("请输入您的名字","Bill Gates")  if (nam ...
  • 应用情景:      在制作网络课件的过程中,可能会遇到这种情况,就是需要在一个视频播放网页中,一边播放RM视频文件,一边显示相应的PowerPoint文件,并且PPT文件随着视频的播放自动进行翻页. 代码原理:   ...
  • 1. 常见用法. char buf[512] ; sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入bu ...