2012-04-27 41 views
0

我正在使用MDProgressHUD来管理使用NSConnection的我的下载进度。 一切都很好。当我试图在调用connectionDidFinishLoading时将HUD labelText从下载到完成更改时遇到问题。MBProgressHUD在connectionDidFinishLoading中更改label.text

在我的connectionDidFinishLoading方法中,我正在更改labelText并将图标更改为复选标记,就像示例应用程序中一样。

HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]]; 
HUD.mode = MBProgressHUDModeCustomView; 
HUD.labelText = @"Finishing Up"; 
NSLog(@"show change now!!!"); 

紧随该代码之后,我解压缩下载并执行一些数据库操作。

但由于某种原因,它不会改变,直到函数结束 [HUD hide:YES afterDelay:4];叫做。

我想在它开始解压我的内容之前进行更改,因为下载已满,并且使应用看起来像挂起或冻结。

我使用zipArchive进行提取,如果它很重要。

任何意见,将不胜感激。

+0

看起来mod只在[HUD hide:YES afterDelay:2]被调用时才会改变。但在文档中,它说设置模式应该是线程安全的。我想知道如果在执行时使用show来运行它将会起作用。 – user1086377 2012-04-27 17:38:44

+0

使用showWhileExucuting也没有工作。这一次,hud消失了,我无法让它显示出来。 – user1086377 2012-04-27 18:30:39

回答

0

对于其他人回来这个,注意设置:

HUD.hidden = YES; 

不足以被称为委托方法。你必须真的打电话:

[HUD hide:YES]; 
0

你有没有试着用:

[HUD setNeedsLayout]; 
[HUD setNeedsDisplay]; 
+0

我添加了代码。似乎没有什么区别。 – user1086377 2012-04-27 16:46:45

0

MBProgressHUD采用国际志愿者组织为一旦检测到变化像标签,进度等属性,你改变它observeValueForKeyPath()应该运行和更新UI。你的代码有没有可能会非常密集并且阻塞了UI?我已经看到了在这之前发生..

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..."]; 
+0

因此,如果我添加了HUD一次,并且只想更改文本(无需隐藏并再次显示),那么该怎么做? – Ans 2014-06-07 09:21:16

+1

只需从视图中获取hud并更改labelText属性即可 – jhurray 2014-06-16 22:56:40

2

这为我工作

dispatch_async(dispatch_get_main_queue(), ^{ 
    progressView.titleLabelText = @"Downloading ..."; 
});