Evento de cambio de texto UITextField
¿Cómo puedo detectar cambios de texto en un campo de texto? El método delegado shouldChangeCharactersInRange
funciona para algo, pero no cumplió exactamente con mi necesidad. Dado que hasta que devuelva SÍ, los textos del campo de texto no están disponibles para otros métodos de observador.
por ejemplo, en mi código calculateAndUpdateTextFields
no aparece el texto actualizado, el usuario ha escrito.
¿Hay alguna forma de obtener algo como textChanged
el controlador de eventos de Java?
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
if (textField.tag == kTextFieldTagSubtotal
|| textField.tag == kTextFieldTagSubtotalDecimal
|| textField.tag == kTextFieldTagShipping
|| textField.tag == kTextFieldTagShippingDecimal)
{
[self calculateAndUpdateTextFields];
}
return YES;
}
De la forma correcta de realizar la devolución de llamada de cambio de texto de uitextfield :
Capto los caracteres enviados a un control UITextField algo como esto:
// Add a "textFieldDidChange" notification method to the text field control.
En Objective-C:
[textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
En rápido:
textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
Luego, en el
textFieldDidChange
método, puede examinar el contenido del campo de texto y recargar la vista de tabla según sea necesario.
Podrías usar eso y ponercalculAndUpdateTextFields como tu selector
.
La respuesta de XenElement es acertada.
Lo anterior también se puede hacer en el generador de interfaces haciendo clic derecho en UITextField y arrastrando el evento de envío "Edición modificada" a su unidad de subclase.
para configurar el detector de eventos:
[self.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
para escuchar realmente:
- (void)textFieldDidChange:(UITextField *)textField {
NSLog(@"text changed: %@", textField.text);
}