不知道UIRefreshController是什么的朋友可以参考iOS6新特征:UIRefreshControl[下拉刷新]使用示例 一文了解这是什么,这里只提怎么使用代码的方式触发UIRefreshControl显示spinner动画,并发起正常情况下下拉之后进行的流程。

项目中需要在界面显示出来的时候进行自动拉取数据并刷新界面,要用一个UIRefreshControl显示其过程。

界面VC是一个UIViewController,tableview被添加到其中,UIRefreshControl在viewDidLoad的时候被添加到tableview中。

以下是相关代码:


  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. [self setBackgroudImage];
  5. self.view.backgroundColor = [UIColor whiteColor];
  6. self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64.f, self.view.frame.size.width, self.view.frame.size.height - 64.f)
  7. style:UITableViewStylePlain];
  8. self.tableView.delegate = self;
  9. self.tableView.dataSource = self;
  10. self.tableView.backgroundColor = [UIColor clearColor];
  11. self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  12. [self.view addSubview:self.tableView];
  13. self.refreshControl = [[UIRefreshControl alloc] init];
  14. self.refreshControl.tintColor = [UIColor whitecolor];
  15. [self.refreshControl addTarget:self
  16. action:@selector(handleRefresh:)
  17. forControlEvents:UIControlEventValueChanged];
  18. [self.tableView addSubview:self.refreshControl];
  19. }

handleRefresh: 为正常情况下下拉tableview会触发的UIRefreshControl的操作,

  1. - (void) handleRefresh:(id)sender{
  2. //TODO: do something here
  3. }

我们要做的是在viewDidAppear的时候完成tableview下拉,并且UIRefreshControl显示spinner表示正在refreshing。参考过以下两个帖子

http://stackoverflow.com/questions/16687253/uirefreshcontrol-auto-start

http://stackoverflow.com/questions/14718850/uirefreshcontrol-beginrefreshing-not-working-when-uitableviewcontroller-is-ins

但很遗憾,没有一个能做到这个,以下是我的解决方案:

  1. - (void)viewDidAppear:(BOOL)animated
  2. {
  3. [super viewDidAppear:animated];
  4. if (self.refreshControl.refreshing) {
  5. //TODO: 已经在刷新数据了
  6. } else {
  7. if (self.tableView.contentOffset.y == 0) {
  8. [UIView animateWithDuration:0.25
  9. delay:0
  10. options:UIViewAnimationOptionBeginFromCurrentState
  11. animations:^(void){
  12. self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
  13. } completion:^(BOOL finished){
  14. [self.refreshControl beginRefreshing];
  15. [self.refreshControl sendActionsForControlEvents:UIControlEventValueChanged];
  16. }];
  17. }
  18. }
  19. }

关键点:[self.refreshControl beginRefreshing]要在完成对tableview contentoffset的设置之后调用,另外要触发handleRefresh需要向UIRefreshControl主动发送一个UIControlEventValueChanged事件

如果你遇到任何问题,可以在这里留下问题,我有时间会来回答。谢谢!

UIRefreshControl自动刷新的更多相关文章

  1. 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。

    本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...

  2. Sublime3和Chrome配置自动刷新网页【实测可用】

    SublimeText2下的LiveReload在SublimeText3下无法正常使用,本文整理SublimeText3安装LiveReload的方法.win7下实测可用! 安装成功后,就不需要再手 ...

  3. gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全

    gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...

  4. 更为简单的Ctrl+S自动刷新浏览器工具-LinrF5

    一款自动刷新浏览器的小工具,它通过监听用户的按键,如果在键盘按下 Ctrl+S ,则自动刷新浏览器,操作十分简单,前端开发必备神器,快速提升工作效率,支持IE.火狐以及最新版的chrome33.之前我 ...

  5. SQL实现类似于自动刷新数据的功能

    有时需要在SQL中,定时刷新某张表,比如说是要定时查询某张表的行数,通常做法就是手动的按F5去执行来刷新数据.但是如果这个定时查询历时较长,10分钟,或半小时,手动的话肯定是要崩溃了.貌似SQL没有像 ...

  6. Javascript实现页面加载完成后自动刷新一遍清除缓存文件

    我们有些时候在加载页面时,会出现缓存文件对当前文件的表现效果有干扰,如有些缓存的样式文件会是页面效果发生改变,这时我们希望页面在加载时能自动刷新一遍清楚缓存文件. 但是由于跳转页面肯定会用到BOM部分 ...

  7. Notepad++自动刷新文本

    现在的日志信息往往都是打印在硬盘上,而不是保存到线上,所以我们常常会使用notepad++来查看硬盘上的文本文件 这时往往会出现两个问题 (1)在notepad++长时间最小化后,再次打开会提示是否下 ...

  8. 简单配置webpack自动刷新浏览器

    文档地址  http://webpack.github.io/docs/usage.html 首先全局安装webpack(我这里使用的是淘宝的cnpm) cnpm install webpack 检查 ...

  9. gruntJs篇之connect+watch自动刷新

    grunt很强大,可以帮我我们解决很多繁琐的操作,虽然刚接触不久,但依然感受到其强大之处,这篇记录一下通过grunt.js实现事实刷新页面, 省去了编码 -> 保存 -> F5..F5.. ...

随机推荐

  1. Mayor's posters(线段树+离散化POJ2528)

    Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51175 Accepted: 14820 Des ...

  2. 【Python】我的Python学习笔记【1】【using Python 2】

    1.模块格式 #!/usr/bin/env python # -*- coding: utf-8 -*- ... ...def main(): ...... ... if __name__=='__m ...

  3. [问题2014S12] 解答

    [问题2014S12]  解答 先证明一个简单的引理. 引理  设 \(B\) 为 \(n\) 阶半正定 Hermite 阵, \(\alpha\) 为 \(n\) 维复列向量, 若 \(\overl ...

  4. ArcGIS10.2中文版破解教程

    ArcGIS10.2中文版前些时间早就出炉了,下载了但是一直没有安装,听说了ArcGIS10.2云处理能力和影像处理能力都增强了!网上经常遇到一些朋友安装失败的问题,现在特此做一个教程!分享一下安装成 ...

  5. HTML新手向

    一:[什么是HTML] HTML全名是Hyper Test Markup language,是超文本标记语言,用来创建和其他在网页浏览器中看到的信息(由排版语言演变而来)它是用来说明页面排版方式的标记 ...

  6. HTTP协议的头信息详解

    转载地址:http://blog.csdn.net/guoguo1980/article/details/2649658 HTTP(HyperTextTransferProtocol)是超文本传输协议 ...

  7. 《BI那点儿事》数据流转换——OLE DB 命令转换

    OLE DB命令对数据流中的数据行执行一个OLE DB命令.它针对数据表中的每一行进行更新操作,可以事先将要更新的数据存放在表中.或者针对一个有输入参数的存储过程,可以将这些参数存放在一个数据表中,不 ...

  8. 0020 Linux 文件操作命令

    1. 创建文件 touch 文件名 2. 删除文件 rm 文件名 3. 复制文件 cp 源文件 目录 4.剪切文件 mv 源文件 目标文件 5.重命名文件 mv 源文件名 新文件名 6.改变文件权限 ...

  9. Canvas与Image互相转换

    转换 Image为 Canvas要把图片转换为Canvas(画板,画布),可以使用canvas元素 context 的drawImage方法: // 把image 转换为 canvas对象 funct ...

  10. attr和prop

    <div class="content-item active"> <table class="table"> <thead> ...