El método delegado “clickedButtonAtIndex:” No se llama
-
22-09-2019 - |
Pregunta
He creado una vista de alertas con dos botones utilizando el siguiente código:
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. Con el fin de 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
}
Sin embargo, este método no se llama cuando se presiona cualquiera de los botones! ¿Puede alguien decirme por qué?
Gracias de antemano,
Sagiftw
Solución
delegate:nil
¿Cómo afectará la vista de alertas asociar un delegado si ha especificado no habrá delegados? Sustituir esa parte con
delegate:self
en su lugar.
Otros consejos
Trate de establecer el delegado a la libre en lugar de cero.
Me estaba llamando de UIAlertView dismissWithClickedButtonIndex: animación: 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;
}
Este método modo alertView: clickedButtonAtIndex: nunca se llama, incluso si se configura delegado adecuada. En lugar de alertView: didDismissWithButtonIndex: se consiga llamar. Así aplicar este método en lugar:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// your code here
}
Si lo que desea es botones mango de vista de alertas solamente, los clickedButtonAtIndex primera llamada y luego didDismissWithButtonIndex.
en .h ponen UIActionSheetDelegate y en .m mientras se crea una alertView ponen el delegado a ser no nula como se hace en el caso anterior
La respuesta correcta a esta pregunta es delegate:nil
. Pero en caso de que el delegado ya está establecido en uno mismo, y el clickedButtonAtIndex
todavía no funciona, trate de comprobar si están apareciendo otra vista controlador ([self.navigationController popViewControllerAnimated:YES];
) después de mostrar la alertview. Esto también puede dar lugar a no ser llamado clickedButtonAtIndex
. Esto es lo que me pasó.
Espero que esto ayude a alguien.