2010-09-09 82 views
0

我有兩個UIAlertView,它們不是一個接一個地顯示。兩個都有兩個按鈕,我需要確定哪個按鈕被按下。我試過使用確定在兩個UIAlertView中的一箇中按下了哪個按鈕

- (void)alertOKCancelAction { 
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Title" 
               message:@"Message" delegate:self 
            cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil]; 
[alert show]; 
[alert release]; 
} 

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
if (buttonIndex == 0) 
{ //Code 

} 
else 
{//Code 

} 
} 

但是,如果我有兩個UIAlertViews,此代碼不起作用。

你能幫我嗎?提前致謝!

回答

3

看起來你可能會稍微優化你的設計。爲什麼不圍繞你的UIAlertView包裝一個方法,然後傳遞你需要顯示警報的信息。

然後使用

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated 
{ 
     NSString *btnTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
     //....Do something based on the btnTitle that was clicked. 

} 

查看基於標題哪個按鈕被點擊。

+0

謝謝!它的工作原理和優化代碼! – Knodel 2010-09-10 13:09:40

3

另一個需要較少資源的選項是隻爲每個警報窗口分配一個標記值。上面列出的方法確實可行,但比較字符串會比使用標記值增加更多的內存使用量。通過爲每個標籤分配標籤值,您仍然可以使用clickedButtonAtIndex選項,然後你只需要檢查警報視圖點擊了哪個:

NSInteger alertTag = alertView.tag 
if (alertTag == 1) { 
    if (buttonIndex == 0 { 
    //do something based on first Alertview being clicked 
    } 
} 
if (alertTag == 2) { 
...continue as much as you need 

我在我的應用程序,因爲有Web服務調用的一個這樣做(所以我們需要檢查網絡連接並顯示警報以重新嘗試呼叫),並且還有其他一些交互的警報。使用上面的標籤選項可以很容易地確定哪個alertview正在與之交互。