2011-12-31 5 views
6

Ho un codice funzionante da un tutorial ma non lo capisco completamente.iOS Principiante: Finestra UIAlertView con 3 pulsanti> Controllare quale pulsante è stato premuto

Situazione:

Dopo un tasto è stato premuto nel mio iPhone App un AlertView appare con tre pulsanti. Ora mi piace controllare quale pulsante l'utente ha premuto.

CODICE dal tutorial:

- (IBAction)infoButtonPressed:(id)sender { 

    UIAlertView *myAlert1 = [[UIAlertView alloc]initWithTitle:@"My Alert View 1" 
                message:@"Here we go" 
                delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"Option1", @"Option2", nil]; 

    [alert show]; 
} 





- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    NSLog(@"Button: %i, was pressed.", buttonIndex); 
} 

codice funziona, vedo l'output corretto nella console come NSLog, ma come è possibile che il metodo:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    NSLog(@"Button: %i, was pressed.", buttonIndex); 
} 

si riferisce alla vista di avviso corretta. In questo caso: myAlert1.

Che dire con più di una vista di avviso. Ad esempio un secondo che chiama myAlert2.

So che il seguente codice non è corretto, ma avrebbe più senso per me se avrei scritto il metodo come segue:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    NSLog(@"Button: %i, was pressed.", buttonIndex_FROM_myAlert1); 
} 

spera che possiate aiutare, mi fa impazzire.

saluti, Marc

risposta

8

come è possibile che il metodo si riferisce alla vista avviso corretta?

Per esattamente questo motivo, il metodo delegato alertView:didDismissWithButtonIndex: indica in realtà a quale visualizzazione di avviso si riferisce. Si noti che il metodo ha due argomenti. Il secondo indica l'indice del pulsante e il primo indica la visualizzazione di avviso a cui si riferisce l'indice di questo pulsante.

Se si dispone di più di una vista di avviso che condivide lo stesso delegato, sarà necessario confrontarsi con il primo argomento di cui si tratta. Per essere in grado di farlo, è necessario memorizzare le viste di avviso in un ivar/proprietà o altra struttura di dati per ricordarle nel metodo delegato. (Oppure, poiché UIAlertView è una sottoclasse di UIView, è possibile utilizzare la proprietà tag per distinguere tra più viste).

+0

Grazie Ole, ora ci sono. Guten Rutsch insneue Jahr! (Tedesco per Happy New Year) ;-) –

+0

Oltre alla tua risposta, ho appena trovato un ottimo post su più di una visualizzazione di avviso e su come distinguerli + codice. Solo per gli altri principianti che hanno lo stesso problema: –

+0

http://stackoverflow.com/questions/6276819/ios-two-uialert-with-two-different-delegate-methods –