我有问题。
我在tableviewcontroller中使用MBProgressHUD
我希望MBProgressHUD加载动画然后用户不能触摸任何东西并等待获取服务器数据显示在tableview上。
我想暂停屏幕直到hud hideAnimated。
谢谢!
这是我的代码:
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.listTableView animated:YES];
hud.label.text = @"Loading";
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self getInfo:nil];
});
hud.userInteractionEnabled = YES;
[hud hideAnimated:YES afterDelay:2];
答案 0 :(得分:0)
在这种情况下,您不应该使用[hud hideAnimated:YES afterDelay:2]
。 dispatch_after
也没有意义。
问题是你的请求可以很快完成(比如0.1秒)并且hud将会再显示1.9秒。或者它可能会持续很长时间,例如30秒或你设置的任何超时,所以你的代码会在实际显示时隐藏hud。
您应该做的是在请求完成时调用完成块(或委托方法)(成功与否)。
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.label.text = @"Loading";
[self getInfoWithSuccess:^{
[hud hideAnimated:YES];
//your code here
} failure:^(NSError *error) {
[hud hideAnimated:YES];
//show error message if needed
}];
请求方法本身:
- (void) getInfoWithSuccess: (void(^)()) success failure: (void(^)(NSError *)) failure {
//do async request here and call success or failure block when it's finished
}