2010-03-29 15 views
6

He creado una vista de alertas con dos botones utilizando el siguiente código:El método "clickedButtonAtIndex:" delegado no se llama

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title 
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil]; 
[alertView show]; 

Quiero ejecutar código cuando se pulsa uno de los botones. Para hacerlo, he añadido el siguiente método para el archivo delegate.m:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
if (buttonIndex==0) //Run some code 
else //Other code 
} 

Pero este método no se llama cuando se presiona cualquiera de los botones! ¿Puede alguien decirme por qué?

Gracias de antemano,

Sagiftw

Respuesta

39
delegate:nil 

¿Cómo afectará la vista de alertas asociar un delegado si ha especificado no habrá delegados? Sustituir esa parte con

delegate:self 

lugar.

+0

¡Gracias por la ayuda! ¡¡¡Olvidé eso!!! =) – Sagiftw

+0

Gracias también me olvidé de eso. – iBapu

3

intente configurar el delegado a la libre en lugar de cero.

0

en .h poner UIActionSheetDelegate y en .m mientras se crea una alertView puso el delegado a ser no nula como se hace en el caso anterior

2

estaba llamando dismissWithClickedButtonIndex de UIAlertView: animada: método del método delegado UITextField porque quería manejar la tecla de retorno del teclado así:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if (textField.tag == 1001) { 
     [textField resignFirstResponder]; 
     [_alert dismissWithClickedButtonIndex:1 animated:YES]; 
    } 
    return YES; 
} 

de esta manera método alertView: clickedButtonAtIndex: nunca se llamó incluso si se configura delegado adecuada. En cambio, alertView: didDismissWithButtonIndex: recibe una llamada. Así aplicar este método en lugar:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    // your code here 
} 

Si lo que desea es manejar los botones de vista de alertas solamente, los clickedButtonAtIndex primera llamada y luego didDismissWithButtonIndex.

0

La respuesta correcta para esta pregunta es delegate:nil. Pero en caso de que el delegado ya esté configurado en sí mismo, y el clickedButtonAtIndex aún no funciona, intente comprobar si está mostrando otro controlador de vista ([self.navigationController popViewControllerAnimated:YES];) después de mostrar la vista de alerta. Esto también puede provocar que no se llame al clickedButtonAtIndex. Esto es lo que me pasó a mí.

Espero que esto ayude a alguien.

Cuestiones relacionadas