2012-08-06 39 views
1

一個按鈕,按下調用我的代碼視圖:刷新之前presentmodalviewcontroller

buttonlabel.text = @"Wait"; 
[self presentModalViewController:controller animated:YES]; 
buttonlabel.text = @"Done"; 

我想立即改變標籤爲「等待」按鈕被按下後。目前發生的情況是視圖的顯示需要1-2秒,並且只有在這些1-2秒過去之後以及視圖更改之前,標籤纔會變爲「等待」。

將動畫從YES更改爲NO不會有幫助。

+0

是'IBAction'中的三行代碼嗎?如果您註釋掉'presentModalView'這一行,文本會立即改變嗎? – aforaudrey 2012-08-06 17:55:55

+0

如果我拿出presentModalView線,文字會立即改變。這些行不是來自IBAction(我沒有使用NIB文件)。該按鈕是以編程方式創建的。代碼行來自單擊按鈕時調用的方法。 – kzia 2012-08-06 20:05:23

回答

2

您需要隊列顯示視圖控制器,以便系統有機會實際將您的按鈕的文本更改爲「等待」。如果你想了解更多信息,請點擊Google runloop iOS

buttonlabel.text = @"Wait"; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    [self presentModalViewController: controller animated: YES]; 
}); 

但你真的應該調查爲什麼介紹VC需要這麼多時間,而不是找到一種方法來優化你的代碼。搜索併發的方法,不要阻塞主線程。

+0

在我之後發佈了我的回答,但是你的回答是正確的,所以我會爲你投票 – shabbirv 2012-08-06 17:58:15

+0

由於我在那裏進行一些處理,因此我預計VC需要幾秒鐘的時間。我嘗試了以上,但它沒有幫助。事實上,出於某種原因,它可以防止標籤發生任何變化。我應該提到我的按鈕位於表格行,如果這有什麼不同。 – kzia 2012-08-06 19:44:41

+0

我很快就發佈了我的回覆。你的解決方案確實奏效我在代碼後意外地留下了buttonlabel.text行,將其重置爲初始值,因此我沒有注意到這一變化。感謝您的幫助。 – kzia 2012-08-06 20:16:30

2
buttonlabel.text = @"Wait"; 

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [self presentModalViewController:controller animated:YES]; 
    buttonlabel.text = @"Done"; 

}); 
+0

你並不需要*延遲*任務,只是排隊就足夠了。 ;-) – 2012-08-06 17:59:38

+0

我也試過,但它沒有幫助。實際上,由於某種原因,它可以防止標籤更改爲「等待」(或者在切換到新VC之前發生的速度太快)。我應該提到我的按鈕位於表格行,如果這有什麼不同。 – kzia 2012-08-06 19:57:57

+0

我很快就發佈了我的回覆。你的解決方案也有效。我在代碼後意外地留下了buttonlabel.text行,將其重置爲初始值,因此我沒有注意到這一變化。感謝您的幫助。 – kzia 2012-08-06 20:17:48