UIRefreshControl在UITableView中失效求有效方案(已试多种方法无效)
嘿,我仔细看了你的代码和问题描述,知道你试了各种方法都没搞定UIRefreshControl的问题,这就给你几个靠谱的解决方案:
方案一:改用UITableView原生的
refreshControl属性(官方推荐) 从iOS 10开始,UITableView已经原生支持直接绑定UIRefreshControl,不需要手动通过addSubview添加,你的代码里手动添加子视图的方式很容易导致布局或事件响应异常。修改代码如下:
- (void)viewDidLoad { [super viewDidLoad]; IArray=[[NSMutableArray alloc]init]; [self doSomethingWithTheJson]; refreshControl = [[UIRefreshControl alloc]init]; [refreshControl addTarget:self action:@selector(refreshTable:) forControlEvents:UIControlEventValueChanged]; // 替换原来的addSubview和sendSubviewToBack,直接设置tableView的refreshControl属性 self.CriTable.refreshControl = refreshControl; }
方案二:检查
refreshTable:方法的实现逻辑 你代码里只写了方法头,一定要确保方法内正确完成刷新逻辑,并且必须调用endRefreshing,不然刷新控件会一直处于转圈状态:
- (void)refreshTable:(UIRefreshControl *)sender { // 这里写你的刷新逻辑,比如重新请求JSON数据 [self doSomethingWithTheJson]; // 数据更新完成后,结束刷新动画 [sender endRefreshing]; // 别忘了刷新tableView展示新数据 [self.CriTable reloadData]; }
额外排查点
- 确认
CriTable已经正确关联到storyboard/xib中的UITableView,没有出现nil的情况 - 如果你的tableView是grouped样式,检查
self.CriTable.contentInset的设置,避免把refreshControl顶出可视区域 - 排查是否有其他手势或控件拦截了UIRefreshControl的触摸事件
内容的提问来源于stack exchange,提问作者user9137841
相关产品推荐
相关产品推荐

