2014-02-13 126 views
1

我不想顯示進度指示器(MBprogress hud),這裏是我實現的代碼。MBProgress hud不顯示Labeltext

[NSThread detachNewThreadSelector: @selector(showMe) toTarget:self withObject:NULL]; 

在show方法中,我試圖顯示MBprogress Hud但它沒有顯示標籤文本。

-(void)showMe 
{ 
if(hudForBal) // hudForBal is my MBprogressHud's object 
    { 
    [hudForBal removeFromSuperview]; 
    [hudForBal release]; 
    hudForBal = nil; 
    } 

    hudForBal =[[MBProgressHUD alloc]init]; 
    hudForBal.labelText [email protected]"Please wait..."; 
    hudForBal.delegate = Nil; 
    [self.view addSubview:hudForBal]; 
    [hudForBal show:YES]; 
} 

它正在工作,但它不顯示標籤文本。我在做什麼錯? 在此先感謝!

+0

應該不是與ui相關的東西總是在/在主線程中完成? – Volker

+0

嘗試hudForBal.delegate =自我可能是多餘的,它不會改變你的標籤文字 –

+0

試過這個'明顯'的東西。 @ jayrajm.g。 – Rana

回答

1

有沒有必要創建一個新的線程來做到這一點,事實上,在主線程以外的任何線程上對UI進行更改是未定義的行爲。如果您在調用此方法時已經在主線程中,那麼您只需按照常規方式執行選擇器,而無需將其發送到其他線程。

但是,如果您在執行此選擇器時已經處於後臺線程中,並且想要更新UI,則可以使用dispatch_async()作爲返回主線程的快捷方式。

- (void)showMe { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     if(hudForBal) { 
      [hudForBal removeFromSuperview]; 
      [hudForBal release]; 
      hudForBal = nil; 
     } 

     hudForBal =[[MBProgressHUD alloc]init]; 
     hudForBal.labelText [email protected]"Please wait..."; 
     hudForBal.delegate = Nil; 
     [self.view addSubview:hudForBal]; 
     [hudForBal show:YES]; 
    }); 
} 
+0

仍然無法正常工作.... – Rana

+0

取決於您的應用正在做什麼=是否可能阻止了runloop,您可能會給UI一些時間進行更新。從Mac OS應用程序我知道,有時它有助於做'[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalFromNow:0.1];'在設置labelText或show之後:在你的情況下。 – Volker

相關問題