不知道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. idea集成git

    这几天刚刚用了idea编辑器.用起来感觉相比eclipse有很大优势.其中我觉得特别引人注意的一个优势就是与git的集成开发.git作为一个代码维护的平台和idea结合使用对团队开发有很大意义.本人是 ...

  2. Sql Server2005新特性及性能

    举几个例子来简单说明 这些例子我引用了Northwind库. 1. TOP 表达式 SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了. --前n名的订单declare @n ...

  3. 数据库设计 Assignment 02

    需求 1.0 请你试分析一下老师(教职工号,老师姓名,年龄),学生(学号,姓名,年龄),课程(课程号,课程名称,开课时间,上课地点)之间的关系, 注:多个老师可以同时教一门课 尝试画出该模型的E-R图 ...

  4. Android study first ----------安卓项目目录结构及adb指令

    #Android项目的目录结构 * Activity:应用被打开时显示的界面 * src:项目代码 * R.java:项目中所有资源文件的资源id * Android.jar:Android的jar包 ...

  5. mys.cnf-性能优化

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = socket = /data//mysql.sock [mysql] no-auto-rehash [mys ...

  6. notePad++ 使用

    Ctrl+L  删除当前行 Ctrl+D 复制 Alt +鼠标 列选中 鼠标选中行首 点一下形成一标识,用F2 可以切换标识 C:\Users\纯访\AppData\Roaming\Microsoft ...

  7. SQL触发器实例

    SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...

  8. 20个Linux服务器安全强化建议(二)

    接上文,继续介绍一些Linux服务器的安全配置. #6.强密码策略.   当我们使用 useradd.usermod 命令创建或维护用户账号时,确保始终应用强密码策略.例如,一个好的密码至少包括8个字 ...

  9. 使用bootstrap框架的模态框与ckeditor产生冲突,ckeditor的弹出窗不可用时的解决方法

    这样可以解决冲突 $.fn.modal.Constructor.prototype.enforceFocus = function () { modal_this = this $(document) ...

  10. 进程、线程、socket套接字-资源大小 & 切换代价

    另,进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html 今天查了一下进程和线程的资源占用. 比如问:栈和堆的大 ...