2011-12-31 10 views
6

Tengo un código de trabajo de un tutorial pero no lo entiendo completamente.iOS Beginner: ventana UIAlertView con 3 botones> Comprobar qué botón se presionó

Situación:

Después de un botón se ha pulsado en mi iPhone App un AlertView aparece con tres botones. Ahora me gusta comprobar qué botón presionó el usuario.

CÓDIGO DE LA Tutorial: trabaja

- (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); 
} 

Código, veo la salida correcta en la consola como un NSLog pero ¿cómo es posible que el método:

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

se refiere a la correcta vista de alerta En este caso: myAlert1.

¿Qué pasa con más de una vista de alerta. Por ejemplo, un segundo llamado myAlert2.

sé el siguiente código no es correcto, sino que tendría más sentido para mí si me gustaría escribir el método de la siguiente manera:

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

espera que usted pueda ayudar, me vuelve loco.

Saludos, Marc

Respuesta

8

¿cómo es posible que el método se refiere a la vista de alertas correcta?

Por este mismo motivo, el método delegado alertView:didDismissWithButtonIndex: en realidad le dice a qué vista de alerta se refiere. Tenga en cuenta que el método tiene dos argumentos. El segundo indica el índice del botón y el primero apunta a la vista de alerta a la que se refiere este índice de botón.

Si tiene más de una vista de alerta que comparte el mismo delegado, tendrá que comparar con el primer argumento de qué alerta se trata. Para poder hacer eso, debe almacenar las vistas de alerta en un ivar/propiedad u otra estructura de datos para recordarlas en el método delegado. (O bien, dado que UIAlertView es una subclase de UIView, puede usar la propiedad tag para distinguir entre varias vistas).

+0

Gracias Ole, ahora lo tengo. ¡Guten Rutsch ins neue Jahr! (Alemán por Feliz Año Nuevo) ;-) –

+0

Además de su respuesta, acabo de encontrar una gran publicación sobre más de una vista de alerta y cómo distinguirlos + código. Solo para otros principiantes que tengan el mismo problema: –

+0

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

Cuestiones relacionadas