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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top