2015-10-30 95 views
0

這裏是代碼,HUD隱藏得很快。我需要2〜5秒才能重新加載數據,有什麼方法可以加速或保持HUD的出現?MBProgressHUD隱藏在tableView之前reloadData()

func loadDorms() { 

    var hud = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    hud.labelText = "加載中" 

    hud.showAnimated(true, whileExecutingBlock:{ 
     let manager = AFHTTPRequestOperationManager() 
     manager.GET(ServiceAPi.getRegionList(23), 
      parameters: nil, 
      success: { 
       operation,responseObject in 

       if let quote = responseObject as? NSArray { 
        self.dorms = quote 
        self.dorm = quote[0] as! NSDictionary 
       } else { 
        print("no quote") 
       } 
       self.leftTableView.reloadData() 
       self.rightTableView.reloadData() 

      }, failure: { 
       operation, error in 

       print("Error: " + error.localizedDescription) 
     }) 

     }){ 
      // 移除 
      hud.removeFromSuperview() 
      hud = nil 
    } 
} 

回答

0

您正在使用異步調用。因此,UI更改將在完成success區塊之前立即發生。因此,如果您希望MBProgressHUD在表重新加載後隱藏,請將其隱藏在success塊中。

 success: { 
       operation,responseObject in 

       if let quote = responseObject as? NSArray { 
        self.dorms = quote 
        self.dorm = quote[0] as! NSDictionary 
       } else { 
        print("no quote") 
       } 
       self.leftTableView.reloadData() 
       self.rightTableView.reloadData() 

       // 移除 
       hud.removeFromSuperview() 
       hud = nil 
      }, failure: { 

       // 移除 
       hud.removeFromSuperview() 
       hud = nil 
       operation, error in 

       print("Error: " + error.localizedDescription) 
    } 
+0

It works,thank you –

+0

@BorongLi很高興幫助你!請將答案標記爲已接受。 – Rumin

0

移動hud.removeFromSuperview()權前的塊中reloadData()通話。問題是你的程序塊比其他順序代碼晚執行。

我需要2〜5秒至reloadData

如果你的意思是reloadData()需要2-5秒,那麼你可能想你的細胞功能cellForRowAtIndexPathreloadData()幾乎是瞬間的,因爲你沒有在任何數據源方法中進行大量計算,特別是在cellForRowAtIndexPath中。

作爲一個方面說明,建議使用弱引用來訪問塊內的類屬性。像這樣的:

weak var aBlockSelf = self 
aBlockSelf.leftTableView.reloadData() 
aBlockSelf.rightTableView.reloadData() 
0

MBProgressHUD具有執行自定義時間跨度的功能。

請參閱下面的代碼。

[MBProgressHUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES]; 

創建方法,您可以設置多少時間來顯示MBProgressHUD。

- (void)myTask 
{ 

    sleep(3);//set the time accordingly your need. 

} 

可能會幫助你。