以下是代码,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
}
}
答案 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.
}
可能会帮助你。