我正在使用MDProgressHUD来管理使用NSConnection的下载进度。 一切都很好。当我尝试将HUD labelText更改为在调用connectionDidFinishLoading时将下载更改为完成时,我遇到了问题。
在我的connectionDidFinishLoading方法中,我正在更改labelText并将图标更改为复选标记,就像在示例应用程序中一样。
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Finishing Up";
NSLog(@"show change now!!!");
在该代码之后,我解压缩下载并执行一些数据库操作。
但由于某种原因,它不会改变,直到函数结束到达的地方 [HUD隐藏:YESDelay:4];被称为。
我希望在开始解压缩我的内容之前进行更改,因为下载已满,这会让应用看起来像挂起或冻结。
如果重要的话,我正在使用zipArchive进行提取。
任何建议都将不胜感激。
答案 0 :(得分:2)
这对我有用
dispatch_async(dispatch_get_main_queue(), ^{
progressView.titleLabelText = @"Downloading ...";
});
答案 1 :(得分:0)
您尝试过:
[HUD setNeedsLayout];
[HUD setNeedsDisplay];
答案 2 :(得分:0)
MBProgressHUD使用KVO检测标签,进度等属性的更改。一旦更改,observeValueForKeyPath()就应该运行并更新UI。您的代码是否真的密集并且阻止了用户界面?我之前发现过这种情况......
答案 3 :(得分:0)
您应该将此方法添加到MBProgressHud的头文件中:
+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view withText:(NSString *)text;
并在.m文件中实现它,如下所示:
+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view withText:(NSString *)text
{
MBProgressHUD *hud = [[self alloc] initWithView:view];
hud.labelText = text;
[view addSubview:hud];
[hud show:YES];
return MB_AUTORELEASE(hud);
}
并在任何地方调用它:
[MBProgressHUD showHUDAddedTo:self.view withText:@"Loading..."];
答案 4 :(得分:0)
对于其他任何回到此处的人,请注意设置:
HUD.hidden = YES;
不足以调用委托方法。你必须实际打电话:
[HUD hide:YES];