pantalla - recuperar notificaciones iphone
Botón de detección presionado cuando hay múltiples vistas de alerta (5)
En su opinión, agregue una propiedad para cada vista de alerta.
UIAlertView *myAlertType1;
UIAlertView *myAlertType2;
@property (nonatomic, retain) UIAlertView *myAlertType1;
@property (nonatomic, retain) UIAlertView *myAlertType2;
Crea tu alerta usando estas propiedades
self.myAlertType1 = [[[UIAlertView alloc] initWithTitle: ... etc] autorelease];
[self.myAlertType1 show];
Luego en tu método de delegado:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (alertView == myAlertType1) {
// check the button types and add behaviour for this type of alert
} else if (alertView == myAlertType2 {
// check the button types and add behaviour for the second type of alert
}
}
Editar: Aunque lo anterior funciona, la sugerencia de iApple de usar la etiqueta parece más clara / más simple.
Tengo varias vistas de alerta en una vista, y uso este código para detectar qué botón se presionó:
-(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 que hay múltiples vistas de alerta 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!
No usarí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 de botón en su lugar o si solo tiene un botón además de un botón de cancelación, use la propiedad UIAlertView
de UIAlertView
.
Para distinguir entre múltiples vistas de alerta, puede usar su propiedad de tag
.
Sería más técnico y mejor que establecer una 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
}
}
Use la propiedad de etiqueta para identificar de forma única cada una de las vistas de alerta u crear.
Me gusta esto
myAlertView.tag = 1
A continuación, en el método de delegado clickedButtonAtIndex compruebe en qué botón de la vista de alerta se hizo clic utilizando esta propiedad de etiqueta,
if(alertView.tag==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
}