Obtener el valor de un UITextField como se introducen las pulsaciones de teclado?
-
23-08-2019 - |
Pregunta
Vamos a decir que tengo el siguiente código:
IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;
Me gustaría que el greetingLabel
para leer "Hola [nameTextField]" tan pronto como el usuario presiona cualquier tecla.
Lo que necesito es básicamente el equivalente de iPhone el método delegado controlTextDidChange
cacao.
El método textField:shouldChangeCharactersInRange:
delegado se llama cada vez que se produce una pulsación de tecla:
- (BOOL) textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
El argumento de cadena devuelve el carácter que se presiona. El valor de la textField
real (nameTextField.text
) permanece en blanco sin embargo.
¿Qué me estoy perdiendo aquí? (Me gustaría nameTextField
para reflejar la secuencia exacta que el usuario ha introducido hasta ahora).
Solución
Resulta que, la manera más fácil de hacer esto es mediante el Interface Builder:
- Añadir un IBAction (a la ViewController, por ejemplo, como en este caso)
- Ctrl-Click (o clic derecho) en la UITextField en Interface Builder
- Conectar el evento "Edición Changed" para el archivo de IBAction del propietario añade en el primer paso.
funciona como un encanto :) (No puedo creer que pasé muchos días en esto, y ahora a darse cuenta de que la solución era mucho más sencillo de lo que pensaba: P)
Otros consejos
se podría registrar una acción para los UIControlEventEditingChanges de eventos en el campo de texto:
[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];
...
// TODO: error checking
- (void)updateLabelUsingContentsOfTextField:(id)sender {
greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];
}
UITextField
tiene una UITextFieldTextDidChange
notificación que será despedido cada vez que cambia el texto si se registra para ello. Registrate que la notificación y en el método llamado por la notificación, cambiar el texto de la etiqueta.
Para añadir a esto, el objeto pasado a su controlador de notificación tendrá el texto de la UITextField
.
Espero que ayude.