在tableView reloadData()之前隐藏MBProgressHUD

时间:2015-10-30 12:40:56

标签: ios uitableview

以下是代码,HUD只是非常快速地隐藏起来。我需要2~5s来重新加载数据,有没有办法加速或只是保持HUD出现?

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

3 个答案:

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

答案 1 :(得分:0)

hud.removeFromSuperview()调用块内之前移动reloadData()。问题是你的块执行时间比其他顺序代码要晚。

  

我需要2~5秒来重新加载数据

如果您的意思是reloadData()需要2-5秒,那么您可能希望对cellForRowAtIndexPath功能进行格式化。鉴于您没有在任何数据源方法中进行大量计算,尤其是在reloadData()中,cellForRowAtIndexPath几乎是即时的。

作为旁注,建议使用对self的弱引用来访问块内的类属性。像这样:

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

答案 2 :(得分:0)

MBProgressHUD具有执行自定义时间跨度的功能。

见下面的代码。

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

创建方法,您可以在其中设置要显示MBProgressHUD的时间。

- (void)myTask
{

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

}

可能会帮助你。