如何使用MBProgressHUD在加载动画时暂停屏幕

时间:2016-11-12 09:35:46

标签: ios iphone uitableview mbprogresshud

我有问题。
我在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];

1 个答案:

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