2010-10-12 12 views
5

Tengo un UITextFieldDelegate que hace un montón de validación en la entrada del usuario para determinar si se les debe permitir o no finalizar la edición. En un ejemplo particular, no es válido dejar el campo en blanco.Detectando cuando el texto de UITextField ha cambiado debido a un movimiento de deshacer?

En este momento estoy usando textField:shouldChangeCharactersInRange:replacementString: para validar el ingreso de texto después de cada edición por parte del usuario.

El problema es este: si el usuario borra el campo (con el pequeño botón "x"), el código de validación pasa al modo "inválido" y evita que el usuario se desplace hasta que haya ingresado un texto válido. Si el usuario sacude el teléfono para recuperar el texto anterior, no se vuelve a llamar al shouldChangeCharactersInRange y el delegado permanece en el estado "no válido" en lugar de reconocer que todo vuelve a estar bien.

No estoy seguro si lo estoy usando correctamente, pero parece que la maquinaria incorporada UITextFieldDelegate no puede hacer frente a los cambios de texto debido a deshacer/rehacer.

¿Cuál es la mejor manera de lograr una validación adecuada en este escenario? ¿Debo realmente necesitar la subclase UITextField para implementar motionEnded:withEvent:? Parece que las cosas de manejo de edición en UITextField realmente deberían ser independientes de si el usuario realmente lo tipeó o si sucedió debido a la acción de deshacer, por lo que sería una pena si realmente tuviera que seguir esa ruta.

Respuesta

5

Enlazar un método para el evento UIControlEventEditingChanged ("Edición modificada" en IB - no "Valor modificado").

Parece que se dispara siempre que/sin embargo cambia el campo de texto.

+0

Excelente, gracias. Funciona muy bien y es mucho más simple que implementar 'shouldChangeCharactersInRange' y' textFieldShouldClear', que es lo que estaba haciendo antes. ¡Suspiro de alivio! – glenc

Cuestiones relacionadas