UIRefreshControl 再次拉动时出现多次

Posted

技术标签:

【中文标题】UIRefreshControl 再次拉动时出现多次【英文标题】:UIRefreshControl appears multiple times on pulling again 【发布时间】:2014-07-24 04:05:50 【问题描述】:

我的tableView 中有一个UIRefreshControl,当我拉出它时,就会调用服务。问题是,如果我已经拉过一次并且正在调用服务,同时,我再次拉动它,我会看到另一个刷新控件。

这是我用来定义刷新控件的代码:

// Pull To Refresh Code
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
[self.myTableView addSubview:self.refreshControl];

我的handleRefresh方法:

-(void) handleRefresh:(UIRefreshControl *) refreshControl
    [self performSelector:@selector(updateBlogList)];

在我的updateBlogList 方法中,我正在调用我的服务,当我得到响应时,我使用[self.refreshControl endRefreshing]

如果我在这条线执行之前再次拉动,屏幕上基本上有两个刷新控件。

我该如何解决它。

【问题讨论】:

【参考方案1】:

在每次拉取时,您都会使用该行创建一个新的refreshControl

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];

这就是为什么每次拉取时都会创建一个新的,并且它也会添加到子视图中。也许您应该对其使用延迟初始化以确保如果该对象已经创建,您将不会创建一个新对象:

if (self.refreshControl == nil) 
    self.refreshControl = [[UIRefreshControl alloc] init];

通过这种方式,它会立即分配给属性,因此您不需要 self.refreshControl = refreshControl 行。

或者,您可以设置一个标志并在调用[self.refreshControl endRefreshing] 时取消设置它,如果设置了标志,则拉动刷新代码根本不会执行。

【讨论】:

以上是关于UIRefreshControl 再次拉动时出现多次的主要内容,如果未能解决你的问题,请参考以下文章

工作拉动以禁用反弹刷新

以编程方式调用 UIRefreshControl 不起作用

拉动刷新默认刷新级别更改

UIRefreshControl 不清除表格视图

UIRefreshControl 需要下拉太远

拉入 UICollectionView 后 UIRefreshControl 不粘