MBProgressHUD在connectionDidFinishLoading中更改label.text

时间:2012-04-27 15:11:20

标签: ios mbprogresshud

我正在使用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进行提取。

任何建议都将不胜感激。

5 个答案:

答案 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];