问题描述

接上一个话题,实现了TabBar的点击刷新以后,开始继续写完成功能,刷新UITableView,于是考虑到iOS 10以后,UIScrollView已经有UIRefreshControl的属性了,干脆用自带的写。于是就有了如下的代码:

  1. 添加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;复制代码
  1. 下拉刷新事件
-(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];}});
}
复制代码
  1. TabBar点击事件
-(void)doubleClickTab:(NSNotification *)notification{//这里有个坑 就是直接用NSInteger接收会有问题 数字不对//因为上个界面传过来的时候封装成了对象,所以用NSNumber接收后再取值NSNumber *index = notification.object;if ([index intValue] == 1) {//刷新[self.newsTableView.refreshControl beginRefreshing];}}
复制代码

此时的效果如下,直接下拉刷新可以,但是点击TabBar不可以:

分析问题

经过Google帮助,终于知道原因,因为系统自带的UIRefreshControl有两个陷阱:

  1. 调用-beginRefreshing方法不会触发UIControlEventValueChanged事件;
  2. 调用-beginRefreshing方法不会自动显示进度圈。

也就是说,只是调用-beginRefreshing方法是不管用的,那么对应的需要做两件事:

  1. 手动设置UIRefreshControl的事件;
  2. 手动设置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使用踩坑相关推荐

  1. iOS开发之NSURLProtocol的那些坑

    接触过iOS系统中URL Loading System都知道,NSURLProtocol是如此地强大,可以拦截应用内几乎所有的网络请求(除了WKWebView),并可以修改请求头,返回client任意 ...

  2. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  3. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  4. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  5. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  6. IOS开发之MD5加密和钥匙串的使用-oc

    IOS开发之MD5加密和钥匙串的使用-oc 源码在我的主页,md5加密是用户登录安全的一个保障.不可逆的,可以暴力破解的. // // ViewController.m // MD5演练 // // ...

  7. IOS开发之CALayer基本属性和使用

    IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...

  8. ios开发之plist 的文件的读写以及沙盒容器路径打印

    ios开发之plist 的文件的读写以及沙盒容器路径打印 核心代码在这里 // // ViewController.m // 21-plist存储和沙盒路径 // // Created by 鲁军 o ...

  9. IOS开发之JSON文件的读写

    IOS开发之JSON文件的读写 // // ViewController.m // 20-JSON的读写 // // Created by 鲁军 on 2021/2/13. //#import &qu ...

最新文章

  1. Android BaseAdapter 例子
  2. CCS初学调试以及RTDX
  3. Atitit .linux 取回root 密码q99
  4. 切削为什么没有切屑_机械加工切削“断屑”的经验分享,老师傅来看看!
  5. iOS四种多线程(swift和oc)
  6. mysql cluster 查看最大索引数_MySQL 数据库优化,看这篇就够了
  7. Hadoop系列之InputFormat,OutputFormat用法
  8. MyCat分布式数据库集群架构工作笔记0015---高可用_负载均衡_Mycat双主双从读写分离
  9. 驱动兼容_【重磅】上海数明发布国内首款兼容光耦隔离式单通道栅极驱动器系列产品SLM34x...
  10. Ubuntu下的几种常见输入法
  11. paypal支付对接(付款方式:即时付款、快速付款):PC端支付、APP端支付,异步回调IPN
  12. 什么是配置管理?配置管理由专人负责吗?
  13. 网络资源计算机教学设计,第11课 网络资源任我搜 教案
  14. ubuntu 下最简单的歌词软件osdlyric (with banshee)
  15. 计算机操作系统—信号
  16. Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
  17. java excel文件转html
  18. 转:如何不断自我提升
  19. 【千寻位置前端校招笔试、一面、二面】
  20. 如何使用Xcode7来调试iOS10设备

热门文章

  1. 【springmvc+mybatis项目实战】杰信商贸-16.新增从表货物信息
  2. ie下input的type属性为hidden问题
  3. Sweeter Than Fiction - Taylor Swift
  4. ssh时出现 Agent admitted failure to sign using the key
  5. matlab7.1(ERROR STARTING DESKTOP)解决
  6. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
  7. ubuntu修改新增用户的目录_Ubuntu 18.04下创建新用户/目录、修改用户权限及删除用户的方法...
  8. win10终端仿真程序_win10下子系统的使用
  9. ASP.NET MVC – 视图简介
  10. spring boot 不连接数据库启动