2019独角兽企业重金招聘Python工程师标准>>>

UIRefreshControl 的使用还是比较简单的,看一下 UIRefreshControl 的定义,基本就知道怎么用了。

UIRefreshControl 是专门为 UITableViewController 设计的,官方不建议在非 UITableViewController 中使用。

本文主要解决两个问题:一是在非 UITableViewController 中使用,二是修改菊花显示位置。

1、UITableViewController + UIRefreshControl

- (void)viewDidLoad {[super viewDidLoad];UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];self.refreshControl = refreshControl;
}- (void)refresh:(UIRefreshControl *)refreshControl
{NSLog(@"start refresh");[self performSelector:@selector(endRefresh:) withObject:refreshControl afterDelay:2.0f];
}- (void)endRefresh:(UIRefreshControl *)refreshControl
{[refreshControl endRefreshing];NSLog(@"end refresh");
}

2、UIViewController + UITableView(UIScrollView) + UIRefreshControl

@interface TableViewDemo () <UITableViewDataSource, UITableViewDelegate>@property (nonatomic, weak) IBOutlet UITableView *tableView;@end
- (void)viewDidLoad {[super viewDidLoad];UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];[self.tableView addSubview:refreshControl];
}- (void)refresh:(UIRefreshControl *)refreshControl
{NSLog(@"start refresh");[self performSelector:@selector(endRefresh:) withObject:refreshControl afterDelay:2.0f];
}- (void)endRefresh:(UIRefreshControl *)refreshControl
{[refreshControl endRefreshing];NSLog(@"end refresh");
}

直接集成上去,这时候你会发现下拉的时候,页面会跳动一下(将UITableView 换成 UIScrollView 也会有同样的问题)。

既然 UIRefreshControl 是由 UITableViewController 控制的,那就让 UITableViewController 来控制,修改代码如下:

- (void)viewDidLoad {[super viewDidLoad];UITableViewController *tableVC = [[UITableViewController alloc] init];tableVC.tableView = self.tableView;UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];tableVC.refreshControl = refreshControl;
}

修改之后,重新运行,这时内容跳动的问题没有了。

参考:http://stackoverflow.com/questions/12497940/uirefreshcontrol-without-uitableviewcontroller/

对于 UIScrollView,目前没有找到更好的解决方案,如果确实要使用的话,那就用只有一个Cell的UITableView来代替 UIScrollView。参考:http://segmentfault.com/q/1010000001823169

3、修改 UIRefreshControl 显示的位置

菊花默认位置是在中间,总有那么一些奇葩需求,需要将菊花显示在其他位置。目前发现了两种方式修改显示位置,但是总体来说本质原理应该是一样的。

方案一:修改 UIRefreshControl 的 bounds,从而修改其显示位置,代码如下:

- (void)viewDidLoad {[super viewDidLoad];UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];self.refreshControl = refreshControl;CGRect bounds = refreshControl.bounds;bounds.origin.x = 50;//左移 50
//    rect.origin.x = -50;//右移 50bounds.origin.y = 10;//上移 10;
//    rect.origin.y = -10;//下移 10;refreshControl.bounds = bounds;
}

方案二:用一个 UIView(refreshControlContainerView) 来显示 UIRefreshControl,通过修改 refreshControlContainerView.frame 来修改菊花的显示位置,代码如下:

- (void)viewDidLoad {[super viewDidLoad];UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];self.refreshControl = refreshControl;UIView *refreshControlContainerView = [[UIView alloc] initWithFrame:CGRectMake(-50, -10, [UIScreen mainScreen].bounds.size.width, 44.0f)];[self.tableView addSubview:refreshControlContainerView];[refreshControlContainerView addSubview:self.refreshControl];
}

4、一个个人主页的实例

实例代码,请看 UserHomeViewController。

5、总结

UIRefreshControl 只适用于一些简单、与特殊的页面,只能实现“下拉刷新”,不能实现“上拉加载更多”。

这里对于“下拉刷新”与“上拉加载更多”推荐使用 MJRefresh ,用法简单。

项目源代码:https://git.oschina.net/cavintang/refresh-control-demo.git

转载于:https://my.oschina.net/songzhu/blog/611343

UIRefreshControl使用总结相关推荐

  1. iOS开发之UIRefreshControl使用踩坑

    问题描述 接上一个话题,实现了TabBar的点击刷新以后,开始继续写完成功能,刷新UITableView,于是考虑到iOS 10以后,UIScrollView已经有UIRefreshControl的属 ...

  2. iOS - UIRefreshControl

    UIRefreshControl:UIControl (UIControl:UIView) 使用一: UITableView之Cell刷新,UIRefreshControl为其一属性. self.cu ...

  3. AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking...

    我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...

  4. IOS6 新特性之UIRefreshControl

    "不会模仿的公司不是好公司不会剽窃的公司不是优秀公司  不会调戏代码的不是骨灰级码工 你同意吗? 苹果估计想取代第三方的pull to refresh"        ------ ...

  5. iOS - UIRefreshControl 刷新数据

    前言 NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIRefreshControl : UIControl 1.UIRefresh ...

  6. UIRefreshControl

    1.使用范围 如果你装了xcode_4.5_developer_preview,那么在UITableViewController.h文件中你会看到,UITableViewController里面有如下 ...

  7. 没有UITableViewController的UIRefreshControl

    本文翻译自:UIRefreshControl without UITableViewController Just curious, as it doesn't immediately seem po ...

  8. UITableView上的iOS UIRefreshControl

    In this tutorial, we'll be implementing UIRefreshControl on the UITableView in our iOS Application. ...

  9. UIRefreshControl系统下拉刷新

    一直以来都是在用李明洁前辈封装的下拉刷新,最近看到有一个系统的下拉刷新,虽然用起来还有很多的限制,但是看到苹果的改变,还是值得肯定的,和大家分享一下.转载地址:http://blog.sina.com ...

最新文章

  1. 一文详解Inception家族的前世今生(从InceptionV1-V4、Xception)附全部代码实现
  2. web服务器time_wait值过高解决方案
  3. 我的书法记录--2018.12.2
  4. OpenCV霍夫变换的演示代码(附完整代码)
  5. FileZilla Server : FTP and FTPS Server
  6. windos命令行设置网络
  7. java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量
  8. 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)
  9. php操作pdo,PHP PDO操作API
  10. 求实数的整数部分和小数部分python_python求实数的整数部分
  11. Q4财报净亏损8350.2万美元,Unity何时摆脱亏损“魔咒”?
  12. 不同时区时间换算_Java中如何显示不同时区的时间(原理详解)
  13. AutoJs学习-实现日期农历时间显示
  14. 【CH01】创建、初始化SpringBoot项目与项目git管理
  15. abb机器人常见维故障现象
  16. 【例子】固定表格的首行与首列
  17. PostgreSQL AUTO INCREMENT
  18. python爬取二级页面_爬虫代码改进(二)|多页抓取与二级页面
  19. 英汉词典 JaVa_Java案例_英汉字典_技术文章
  20. 关于压缩工具7-zip的7z脚本用法

热门文章

  1. Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
  2. 以回调形式使用startActivityForResult方法,并解决Activity被回收的问题
  3. 计算机术语表达祝福,考研祝福| | 计算机 愿你们历经千帆,终达彼岸
  4. 计算机网络部分(共44题),2018年10月自考04741计算机网络原理试卷及答案
  5. android can为啥能发收不到数据_拼多多登录时手机收不到短信验证码怎么办
  6. 不定高度的弹框 垂直水平居中
  7. php56wmysql_centos6.5下使用yum完美搭建LNMP环境(php5.6)【Fizzday整理】
  8. 时间日期格式转换_JAVA
  9. 【Linux】17.Ubuntu16.04 系统添加网关和DNS的两种方式
  10. Caffe学习系列(18): 绘制网络模型