iOS 6中新的UIRefreshControl是一個值得歡迎的新功能,但似乎沒有內置的超時機制。需要實現UIRefreshControl的超時機制。
這裏的情景,爲什麼我需要它:
比方說,使用者將刷新。它進入紡紗模式,而代碼嘗試從服務器獲取數據。服務器不會響應,並且會導致紡輪永遠旋轉。所以,應該有一個超時機制來阻止它。
實現它的最佳方式是什麼?
iOS 6中新的UIRefreshControl是一個值得歡迎的新功能,但似乎沒有內置的超時機制。需要實現UIRefreshControl的超時機制。
這裏的情景,爲什麼我需要它:
比方說,使用者將刷新。它進入紡紗模式,而代碼嘗試從服務器獲取數據。服務器不會響應,並且會導致紡輪永遠旋轉。所以,應該有一個超時機制來阻止它。
實現它的最佳方式是什麼?
首先用您需要的時間量設置一個計時器。要求它檢查以下內容。
您可以使用下面的屬性來檢查它是否仍然清新的一段時間後
@屬性(非原子,只讀,吸氣= isRefreshing)BOOL刷新
如果是,那麼你可以使用
停止endRefreshing
喜歡的東西:
- (無效){checkAndStop
如果(refreshControl.refreshing == YES),如果你想
//顯示一個警告 [refreshControl endRefreshing]
}
我一直在使用的NSTimer結束清爽實施:
[NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(handleDataRefreshFailure:) userInfo:nil repeats:NO];
還要考慮使用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
});
斯威夫特版本:
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()
}
})
這是否有問題,但?如果您將計時器設置爲5秒鐘,該怎麼辦?用戶拉下UIRefreshControl(啓動計時器),並在2秒後正常結束。另外2秒鐘後,用戶再次拉下UIRefreshControl。 1秒鐘後,原來的計時器命中5秒,即使任務尚未完成,endRefreshing也會被調用。我誤解了什麼嗎? – Jschiff