2011-08-19 92 views
27

我在一個視圖中的多個警報意見,我用這個代碼來檢測哪個按鈕被按下:檢測按鈕按下時有多個警報意見

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if ([title isEqualToString:@"OK"]) { 

      //for one alert view 
      [passCode becomeFirstResponder]; 

    } else if ([title isEqualToString:@" OK "]) { 

     //for another alert view, had to change "OK" to " OK " 
     [passCodeConfirm becomeFirstResponder]; 

    } 
} 

現在,因爲有多個警報視圖在一個視圖做不同的事情,我不得不欺騙用戶思考「OK」和「OK」是一回事。它工作,看起來很好,但它感覺有點混亂。當然還有另外一種方法可以做到這一點,比如將這個特定於一個警報視圖,然後將其具體化爲另一個視圖。你知道我會怎麼做嗎?謝謝!

回答

55

對於單獨的UIAlertView並在其委託方法中進行標識和訪問,設置獨特的標籤會更好。

例如,

UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Are You Sure you want to Update?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil]; 
    [alert setTag:1]; 
    [alert show]; 
    [alert release]; 

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
    { 
     if(alertView.tag == 1) 
     { 
      // set your logic 
     } 
    } 
+0

我喜歡這個比我更好的解決方案上面 – gamozzii

+0

很好,謝謝您幫幫我!標籤可以分配給幾乎任何UI對象嗎? –

+0

所有支持標記的getter/setter屬性的UI對象,開發人員都可以指定。只要同一類別必須有唯一標籤才能正確迴應。 –

2

我不會使用標題來區分按鈕。當您的應用已本地化或您決定更改按鈕標題時,您會遇到問題,但忘記隨時隨地更新它們。使用按鈕索引,或者如果除了取消按鈕外只有一個按鈕,請使用UIAlertViewcancelButtonIndex屬性。

要區分多個警報視圖,您可以使用它們的tag屬性。

2

在您看來,每個警報視圖中添加屬性。

編輯:雖然上面的作品,使用標籤的iApple的建議似乎更清潔/簡單

UIAlertView *myAlertType1; 
UIAlertView *myAlertType2; 

@property (nonatomic, retain) UIAlertView *myAlertType1; 
@property (nonatomic, retain) UIAlertView *myAlertType2; 

使用這些屬性

self.myAlertType1 = [[[UIAlertView alloc] initWithTitle: ... etc] autorelease]; 
[self.myAlertType1 show]; 
在你的委託方法

然後創建警報。

+2

我不喜歡使用標籤,因爲當對象應該告訴你你需要知道什麼時,你必須添加和訪問額外的信息。 –

1
//in your .h file 
    UIAlertView* alert1; 
    UIAlertView* alert2; 

    //in your .m file 
    // when you are showing your alerts, use 
    [alert1 show]; //or 
    [alert2 show]; 

    //and just check your alertview in the below method 

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
    { 
     if(alertView == alert1) 
     { 
       //check its buttons 
     } 
     else //check other alert's btns 
    } 
4

使用標籤屬性來唯一標識您創建的每個alertview。

喜歡這個

myAlertView.tag = 1 

然後使用這個標籤屬性點擊了哪個alertview的按鈕clickedButtonAtIndex委託方法檢查,

if(alertView.tag==1)