3

Apple 在 iOS 6 中的新 UIRefreshControl 是一个受欢迎的新功能,但似乎没有内置超时机制。

这是我需要它的场景:

假设用户拉刷新。它进入旋转模式,而代码尝试从服务器获取数据。服务器不响应,将导致纺车永远旋转。所以,应该有一个超时机制来阻止它。

实施它的最佳方法是什么?

4

4 回答 4

3

首先用你需要的时间设置一个计时器。要求它检查以下内容。

您可以使用以下属性检查一段时间后它是否仍在刷新

@property (nonatomic, readonly, getter=isRefreshing) BOOL 刷新

如果是,那么您可以使用

结束刷新

就像是 :

-(void)checkAndStop{
if(refreshControl.refreshing == YES) // 如果需要显示警报
[refreshControl endRefreshing];
}

于 2012-10-09T21:00:01.460 回答
3

还可以考虑使用 dispatch_after,它可能比创建 NSTimer 消耗更少。

int64_t delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    code to be executed on the main queue after delay
});
于 2012-10-09T23:07:20.907 回答
1

我已经实现了使用 NSTimer 来结束刷新:

    [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(handleDataRefreshFailure:) userInfo:nil repeats:NO];
于 2012-10-09T21:25:06.887 回答
0

斯威夫特版本:

let delayInSeconds: UInt64 = 2
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * NSEC_PER_SEC))
dispatch_after(popTime, dispatch_get_main_queue(), {
     if refreshControl.refreshing {
        refreshControl.endRefreshing()
     }
   })
于 2016-06-24T10:12:42.513 回答