2011-01-10 164 views
0

我的UIAlertViews有一個小問題。我試圖展示它,執行一些任務,然後自動解除。這是我目前使用的代碼:UIAlertView不顯示

callingTaxi = [[UIAlertView alloc] initWithTitle:@"" message:@"検索中" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil]; 
[callingTaxi show]; 
/* Do some tasks */ 
[callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 
[callingTaxi release]; 

然而,UIAlertView中只顯示一半。我可以看到背景變暗,但是在任務完成後,警報視圖迅速出現,然後再次消失。

任何想法如何解決這個問題?

+0

能否詳細說明您的解決方案,因爲我有同樣的問題,謝謝! – Rasman 2011-05-29 20:03:55

回答

3

它做節目,但你關閉它馬上,而不是等待用戶做一些事情,與

[callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 

沒有時間爲iOS完全呈現它。無論如何,這不是應該如何使用dismissWithClickedButtonIndex。你想在這裏做什麼?

編輯:我想你需要分配一個委託給UIAlertView,並讓委託處理AlertView內發生的事情。

+0

謝謝。解決我的問題:) – Ben 2011-01-10 14:05:14

1

你不應該關閉這表明它同樣的功能裏面,由計時器關閉它,或作爲反應到另一個事件。

0

你應該爲alertview

- (void) alertView: (UIAlertView *) alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
// Do stuff 
// Or if you have multiple buttons, you could use a switch 

[callingTaxi release]; 

或者你可以自動釋放創建的方法..

但x3ro給了正確的答案,你自己調用該方法,而不是等待用戶按按鈕..

1

你不需要委託。問題在於你所做的任務必須發生在後臺線程上,所以主線程會獨自更新屏幕。

如果您更新代碼以使用塊和調度隊列,這樣就可以了:

callingTaxi = [[UIAlertView alloc] initWithTitle:@"" message:@"検索中" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil]; 
[callingTaxi show]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{ 
    /* Do some tasks */ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // this code is back on the main thread, where it's safe to mess with the GUI 
     [callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 
     [callingTaxi release]; 
    }); 
}); 
0

的UIAlertView中被駁回: [callingTaxi dismissWithClickedButtonIndex:0動畫:是]; 用戶可以閱讀它之前。

你打算讓最終用戶閱讀它多久?