UIRefreshControl使用总结
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使用总结相关推荐
- iOS开发之UIRefreshControl使用踩坑
问题描述 接上一个话题,实现了TabBar的点击刷新以后,开始继续写完成功能,刷新UITableView,于是考虑到iOS 10以后,UIScrollView已经有UIRefreshControl的属 ...
- iOS - UIRefreshControl
UIRefreshControl:UIControl (UIControl:UIView) 使用一: UITableView之Cell刷新,UIRefreshControl为其一属性. self.cu ...
- AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking...
我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...
- IOS6 新特性之UIRefreshControl
"不会模仿的公司不是好公司不会剽窃的公司不是优秀公司 不会调戏代码的不是骨灰级码工 你同意吗? 苹果估计想取代第三方的pull to refresh" ------ ...
- iOS - UIRefreshControl 刷新数据
前言 NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIRefreshControl : UIControl 1.UIRefresh ...
- UIRefreshControl
1.使用范围 如果你装了xcode_4.5_developer_preview,那么在UITableViewController.h文件中你会看到,UITableViewController里面有如下 ...
- 没有UITableViewController的UIRefreshControl
本文翻译自:UIRefreshControl without UITableViewController Just curious, as it doesn't immediately seem po ...
- UITableView上的iOS UIRefreshControl
In this tutorial, we'll be implementing UIRefreshControl on the UITableView in our iOS Application. ...
- UIRefreshControl系统下拉刷新
一直以来都是在用李明洁前辈封装的下拉刷新,最近看到有一个系统的下拉刷新,虽然用起来还有很多的限制,但是看到苹果的改变,还是值得肯定的,和大家分享一下.转载地址:http://blog.sina.com ...
最新文章
- 一文详解Inception家族的前世今生(从InceptionV1-V4、Xception)附全部代码实现
- web服务器time_wait值过高解决方案
- 我的书法记录--2018.12.2
- OpenCV霍夫变换的演示代码(附完整代码)
- FileZilla Server : FTP and FTPS Server
- windos命令行设置网络
- java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量
- 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)
- php操作pdo,PHP PDO操作API
- 求实数的整数部分和小数部分python_python求实数的整数部分
- Q4财报净亏损8350.2万美元,Unity何时摆脱亏损“魔咒”?
- 不同时区时间换算_Java中如何显示不同时区的时间(原理详解)
- AutoJs学习-实现日期农历时间显示
- 【CH01】创建、初始化SpringBoot项目与项目git管理
- abb机器人常见维故障现象
- 【例子】固定表格的首行与首列
- PostgreSQL AUTO INCREMENT
- python爬取二级页面_爬虫代码改进(二)|多页抓取与二级页面
- 英汉词典 JaVa_Java案例_英汉字典_技术文章
- 关于压缩工具7-zip的7z脚本用法
热门文章
- Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
- 以回调形式使用startActivityForResult方法,并解决Activity被回收的问题
- 计算机术语表达祝福,考研祝福| | 计算机 愿你们历经千帆,终达彼岸
- 计算机网络部分(共44题),2018年10月自考04741计算机网络原理试卷及答案
- android can为啥能发收不到数据_拼多多登录时手机收不到短信验证码怎么办
- 不定高度的弹框 垂直水平居中
- php56wmysql_centos6.5下使用yum完美搭建LNMP环境(php5.6)【Fizzday整理】
- 时间日期格式转换_JAVA
- 【Linux】17.Ubuntu16.04 系统添加网关和DNS的两种方式
- Caffe学习系列(18): 绘制网络模型