2010-12-17 8 views
13

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html¿Por qué no descartaWithClickedButtonIndex alguna vez llamar a clickedButtonAtIndex?

Estoy usando ese código para hacer que mi aplicación de iPhone muestre un alertView con un UITextField incluido y botones correspondientes de CANCEL y OK.

El usuario puede ingresar texto, presionar CANCELAR u OK ... y veo el texto ingresado por el usuario ... usando mi código dentro del método clickedButtonAtIndex.

Todo funciona, excepto por 1 cosa: en lugar de aceptar, el usuario puede presionar HECHO en el teclado. Estoy usando dismissWithClickedButtonIndex para simular un clic OK ... pero luego clickedButtonAtIndex nunca se llama.

¿No debería descartarWithClickedButtonIndex también llamar a clickedButtonAtIndex?

Estoy tratando de hacer clic en ButtonIntdex para llamar si se pulsa CANCELAR, o OK, o incluso HECHO.

Respuesta

0

no estoy seguro si entiendo perfectamente su pregunta, pero aquí es mi intento:

En primer lugar, es necesario quitar el if (buttonIndex != [alertView cancelButtonIndex]) del ejemplo. Esto debería funcionar para los botones OK y CANCELAR.

Para reconocer la tecla HECHO del teclado, use - (BOOL)textFieldShouldReturn:(UITextField *)textField del UITextFieldDelegate. Aquí puede llamar al [textField resignFirstResponder] para cerrar el teclado.

Además, ¿qué hacer en clickedButtonAtIndex? ¿No podrías crear tu propio método y llamarlo cuando lo necesites?

37

Dado que esta es una vieja pregunta, probablemente ya se haya dado cuenta, pero estaba increíblemente frustrado con esto y no pude encontrar ninguna ayuda de Google, así que para cualquiera que se encuentre con esto en el futuro: cuando llame al dismissWithClickedbuttonIndex, el método que se llama es alertView:didDismissWithButtonIndex, no alertView:clickedButtonAtIndex. Se comporta exactamente de la misma manera, y no puedo entender por qué serían dos métodos separados para lo que parece ser la misma acción, pero ahí está.

+0

Gracias por estas líneas, patrón de delegación extraño, dismissWithClickedButton debe llamar POR LO MENOS a ambos métodos del delegador uno para tratar los clics del botón y el otro para tratar el cierre de la alerta. Confundir, innecesaria complejidad innecesaria –

2

clickedButtonAtIndex se llama cuando el usuario realmente hace clic en el botón. Al hacer clic en el botón puede o no descartar la alerta. los botones estándar Aceptar/Cancelar tienen el efecto de descartar la alerta al hacer clic. Si un clic se traduce para descartar o se llama a un método dismissWithClickedbuttonIndex, se llamó al DismissWithButtonIndex.

+0

De hecho, pero no tiene sentido desde el punto de vista de un patrón de delegación.lo que esto significa es alertViewClickedButtonAtIndex se llama A VECES un botón se presiona y no SIEMPRE como lo sugiere el método de delegación. Ya sea que cierre la alerta o no, que es un problema completamente diferente, ahora esa es la responsabilidad de didDismissWithButtonClicked: –

0

tuve el mismo problema con UIAlertView (Bloques) categoty UIAlertView-Blocks

Mi solución: UIAlertView (bloques) -> MYAlertView: UIAlertView

veces método: - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex llama. A veces no llamaba.

Entonces ... traté de encontrar una solución en muchas fuentes. Luego creé la subclase de UIAlertView con absolutamente el mismo código. Y mi problema fue resuelto De hecho, es un poco más difícil de usar. Pero no más estos intrusos.

Cuestiones relacionadas