2012-04-27 78 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 ..."; 
});