2011-08-19 17 views
27

tengo varias vistas de alertas en una sola vista, y utilizo este código para detectar que se pulsó el botón:botón Detectar presionado cuando hay múltiples vistas de alertas

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

    } 
} 

Ahora, ya que hay múltiples vistas de alertas en una vista que hacen cosas diferentes, tengo que engañar al usuario para que piense que "OK" y "OK" son lo mismo. Funciona y se ve bien, pero se siente un poco desordenado. Sin duda, hay otra forma de hacerlo, como hacer que esto sea específico para una vista de alerta y luego hacerlo específico para otro. ¿Sabes cómo haría esto? ¡Gracias!

Respuesta

55

Sería más técnico y mejor que establecer la etiqueta única para UIAlertView por separado e identificarlo y acceder en su método de delegado.

Por ejemplo,

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

me gusta esta mejor que mi solución anterior – gamozzii

+0

Grandes, gracias por su ¡ayuda! ¿Pueden las etiquetas asignarse a casi cualquier objeto UI? –

+0

Todos los objetos de la interfaz de usuario que admiten la propiedad getter/setter para la etiqueta, el desarrollador puede asignar. Siempre que el mismo tipo de clase deba tener una etiqueta única para obtener la respuesta adecuada. –

2

No utilizaría los títulos para distinguir entre los botones. Te encontrarás con problemas cuando tu aplicación esté localizada o decidas cambiar los títulos de los botones, pero olvídate de actualizarlos en todas partes. Use los índices del botón en su lugar o si solo tiene un botón además del botón cancelar, use la propiedad cancelButtonIndex de UIAlertView.

Para distinguir entre varias vistas de alerta, puede usar su propiedad tag.

2

En su opinión, añadir una propiedad para cada vista de alerta.

UIAlertView *myAlertType1; 
UIAlertView *myAlertType2; 

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

Crear su alerta utilizando estas propiedades

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

Luego, en el método de delegado:

Editar: A pesar de lo anterior funciona, sugerencia de utilizar la etiqueta de iApple parece más limpia/más simple .

+2

No me gusta usar etiquetas porque tiene que agregar y acceder a información adicional cuando el objeto debe decirle lo que necesita saber. –

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

Utilice la propiedad de etiqueta para identificar de forma única cada una de las vistas de alerta u crear.

gusta esta

myAlertView.tag = 1 

Luego, en el cheque método clickedButtonAtIndex delegado el que se hizo clic en el botón de alertview el uso de esta propiedad de etiqueta,

if(alertView.tag==1) 
Cuestiones relacionadas