最近在做项目的时候做了一个UIWebView加载pdf的页面,在[_webView loadRequest:_request]; 开始请求之后,加上了一句 [MBProgressHUD showMessage:@""]; 代页面加载完毕之后,再调用[MBProgressHUD hideHUD];方法的时候发现,MBProgressHUD竟然不消失。
进到框架中发现
if (view == nil) view = [[UIApplication sharedApplication].windows lastObject];这句,就是在未指定MBProgressHUD显示在哪个视图中的时候,框架会自动的将它加到[[UIApplication sharedApplication].windows lastObject] 中,而当你调用[MBProgressHUD hideHUD]的时候,框架会自动的找到当前的[[UIApplication sharedApplication].windows lastObject],然后隐藏MBProgressHUD,其中的问题就是,在你加载UIWebView之前和加载WebView之后的[UIApplication sharedApplication].windows.count是不一样的,windows中的数量发生了变化,也就是框架再次调用[[UIApplication sharedApplication].windows lastObject] 这句话的时候是无法找到当前视图中的MBProgressHUD 的,因此,调用[MBProgressHUD hideHUD]时无效的。
解决办法
MBProgressHUD * hudView = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
[hudView show:YES];
通过这种方式指定MBProgressHUD所在的视图,然后通过[MBProgressHUD hideAllHUDsForView:self.view animated:YES];这种方式隐藏MBProgressHUD就可以了