2011-08-19 11 views
27

ho più viste degli avvisi in un'unica vista, e io uso questo codice per rilevare quale pulsante è stato premuto:pulsante Rilevamento premuto quando ci sono più visualizzazioni degli avvisi

-(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]; 

    } 
} 

Ora, poiché non ci sono più viste degli avvisi in un'unica vista che fanno cose diverse, devo indurre l'utente a pensare che "OK" e "OK" siano la stessa cosa. Funziona e sembra a posto, ma sembra un po 'disordinato. Sicuramente c'è un altro modo per farlo, come renderlo specifico per una vista di avviso e renderlo specifico per un'altra. Sai come lo farei? Grazie!

risposta

55

Sarebbe anche più tecnico e migliore che impostare tag unico per UIAlertView separato e identificarlo e accedere nel suo metodo delegato.

Per esempio,

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

mi piace meglio di mia soluzione sopra – gamozzii

+0

Grandi, grazie per la vostra Aiuto! I tag possono essere assegnati praticamente a qualsiasi oggetto dell'interfaccia utente? –

+0

Tutti gli oggetti dell'interfaccia utente che supportano la proprietà getter/setter per il tag, lo sviluppatore può assegnare. Fornito, per lo stesso tipo di classe deve avere un tag unico per ottenere una risposta corretta. –

2

Non vorrei usare i titoli per distinguere tra i pulsanti. Incontrerai problemi quando la tua app è localizzata o decidi di cambiare i titoli dei pulsanti, ma dimentica di aggiornarli ovunque. Utilizzare invece gli indici dei pulsanti o se si dispone di un solo pulsante oltre a un pulsante Annulla, utilizzare la proprietà cancelButtonIndex di UIAlertView.

Per distinguere tra più viste di avviso, è possibile utilizzare la loro proprietà tag.

2

Secondo lei, aggiungere una proprietà per ogni visualizzazione di allarme.

UIAlertView *myAlertType1; 
UIAlertView *myAlertType2; 

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

Create il vostro avviso utilizzando queste proprietà

self.myAlertType1 = [[[UIAlertView alloc] initWithTitle: ... etc] autorelease]; 
[self.myAlertType1 show]; 

Poi, nel tuo metodo delegato:

Edit: Anche se le opere di cui sopra, il suggerimento di iApple di utilizzare il tag sembra più pulito/più semplice .

+2

Non mi piace usare i tag perché devi aggiungere e accedere a informazioni extra quando l'oggetto deve dirti ciò che devi sapere. –

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

Utilizzare la proprietà del tag per identificare in modo univoco ciascuna dell'avviso di avviso creato.

Ti piace questa

myAlertView.tag = 1 

Poi nel controllo di metodo di clickedButtonAtIndex delegato quale pulsante di alertview stato cliccato usando questa proprietà tag,

if(alertView.tag==1) 
Problemi correlati