iOS开发之UIRefreshControl使用踩坑
问题描述
接上一个话题,实现了TabBar的点击刷新以后,开始继续写完成功能,刷新UITableView,于是考虑到iOS 10
以后,UIScrollView
已经有UIRefreshControl
的属性了,干脆用自带的写。于是就有了如下的代码:
- 添加UIRefreshControl到UITableView上去
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];refreshControl.tintColor = [UIColor grayColor];refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新"];[refreshControl addTarget:self action:@selector(refreshTabView) forControlEvents:UIControlEventValueChanged];self.newsTableView.refreshControl = refreshControl;复制代码
- 下拉刷新事件
-(void)refreshTabView
{//添加一条数据[self.newsData insertObject:[self.newsData firstObject] atIndex:0];dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self.newsTableView reloadData];if ([self.newsTableView.refreshControl isRefreshing]) {[self.newsTableView.refreshControl endRefreshing];}});
}
复制代码
- TabBar点击事件
-(void)doubleClickTab:(NSNotification *)notification{//这里有个坑 就是直接用NSInteger接收会有问题 数字不对//因为上个界面传过来的时候封装成了对象,所以用NSNumber接收后再取值NSNumber *index = notification.object;if ([index intValue] == 1) {//刷新[self.newsTableView.refreshControl beginRefreshing];}}
复制代码
此时的效果如下,直接下拉刷新可以,但是点击TabBar不可以:
分析问题
经过Google帮助,终于知道原因,因为系统自带的UIRefreshControl有两个陷阱:
- 调用
-beginRefreshing
方法不会触发UIControlEventValueChanged
事件; - 调用
-beginRefreshing
方法不会自动显示进度圈。
也就是说,只是调用-beginRefreshing
方法是不管用的,那么对应的需要做两件事:
- 手动设置UIRefreshControl的事件;
- 手动设置UITableView的ContentOffset,露出进度圈。
解决问题
只需要修改上面第3步中的代码如下:
-(void)doubleClickTab:(NSNotification *)notification{//这里有个坑 就是直接用NSInteger接收会有问题 数字不对//因为上个界面传过来的时候封装成了对象,所以用NSNumber接收后再取值NSNumber *index = notification.object;if ([index intValue] == 1) {//刷新//animated不要为YES,否则菊花会卡死[self.newsTableView setContentOffset:CGPointMake(0, self.newsTableView.contentOffset.y - self.newsTableView.refreshControl.frame.size.height) animated:NO];[self.newsTableView.refreshControl beginRefreshing];[self.newsTableView.refreshControl sendActionsForControlEvents:UIControlEventValueChanged];}}
复制代码
最终效果:
转载于:https://juejin.im/post/5ab9f1866fb9a028e0147dc3
iOS开发之UIRefreshControl使用踩坑相关推荐
- iOS开发之NSURLProtocol的那些坑
接触过iOS系统中URL Loading System都知道,NSURLProtocol是如此地强大,可以拦截应用内几乎所有的网络请求(除了WKWebView),并可以修改请求头,返回client任意 ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
- (0045) iOS 开发之MBProgressHUD 源码学习
(0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1. 学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...
- (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接
1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- IOS开发之MD5加密和钥匙串的使用-oc
IOS开发之MD5加密和钥匙串的使用-oc 源码在我的主页,md5加密是用户登录安全的一个保障.不可逆的,可以暴力破解的. // // ViewController.m // MD5演练 // // ...
- IOS开发之CALayer基本属性和使用
IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...
- ios开发之plist 的文件的读写以及沙盒容器路径打印
ios开发之plist 的文件的读写以及沙盒容器路径打印 核心代码在这里 // // ViewController.m // 21-plist存储和沙盒路径 // // Created by 鲁军 o ...
- IOS开发之JSON文件的读写
IOS开发之JSON文件的读写 // // ViewController.m // 20-JSON的读写 // // Created by 鲁军 on 2021/2/13. //#import &qu ...
最新文章
- Android BaseAdapter 例子
- CCS初学调试以及RTDX
- Atitit .linux 取回root 密码q99
- 切削为什么没有切屑_机械加工切削“断屑”的经验分享,老师傅来看看!
- iOS四种多线程(swift和oc)
- mysql cluster 查看最大索引数_MySQL 数据库优化,看这篇就够了
- Hadoop系列之InputFormat,OutputFormat用法
- MyCat分布式数据库集群架构工作笔记0015---高可用_负载均衡_Mycat双主双从读写分离
- 驱动兼容_【重磅】上海数明发布国内首款兼容光耦隔离式单通道栅极驱动器系列产品SLM34x...
- Ubuntu下的几种常见输入法
- paypal支付对接(付款方式:即时付款、快速付款):PC端支付、APP端支付,异步回调IPN
- 什么是配置管理?配置管理由专人负责吗?
- 网络资源计算机教学设计,第11课 网络资源任我搜 教案
- ubuntu 下最简单的歌词软件osdlyric (with banshee)
- 计算机操作系统—信号
- Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
- java excel文件转html
- 转:如何不断自我提升
- 【千寻位置前端校招笔试、一面、二面】
- 如何使用Xcode7来调试iOS10设备
热门文章
- 【springmvc+mybatis项目实战】杰信商贸-16.新增从表货物信息
- ie下input的type属性为hidden问题
- Sweeter Than Fiction - Taylor Swift
- ssh时出现 Agent admitted failure to sign using the key
- matlab7.1(ERROR STARTING DESKTOP)解决
- socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
- ubuntu修改新增用户的目录_Ubuntu 18.04下创建新用户/目录、修改用户权限及删除用户的方法...
- win10终端仿真程序_win10下子系统的使用
- ASP.NET MVC – 视图简介
- spring boot 不连接数据库启动