需要为UIRefreshControl实现超时机制。

时间:2012-10-09 20:55:21

标签: iphone ios ipad uirefreshcontrol

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

以下是我需要它的场景:

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

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

4 个答案:

答案 0 :(得分:3)

首先使用您需要的时间设置计时器。请它检查以下内容。

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

  

@property(非原子,readonly,getter = isRefreshing)BOOL刷新

如果是,那么你可以使用

停止它
  

endRefreshing

类似的东西:

  

- (无效)checkAndStop {
        if(refreshControl.refreshing == YES)             //如果你想要显示警告             [refreshControl endRefreshing];
     }

答案 1 :(得分: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
});

答案 2 :(得分:1)

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

    [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(handleDataRefreshFailure:) userInfo:nil repeats:NO];

答案 3 :(得分:0)

Swift版本:

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()
     }
   })