Estoy usando el siguiente código para intentar que textField2
el contenido de texto se actualice para que coincida textField1
cada vez que el usuario escribe textField1
.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
Sin embargo, el resultado que observo es que ...
textField2 es "12", cuando textField1 es "123"
textField2 es "123", cuando textField1 es "1234"
... cuando lo que quiero es:
textField2 es "123", cuando textField1 es "123"
textField2 es "1234", cuando textField1 es "1234"
¿Qué estoy haciendo mal?
ios
objective-c
uitextfield
user265961
fuente
fuente
Respuestas:
-shouldChangeCharactersInRange
se llama antes de que el campo de texto cambie su texto, por eso está obteniendo un valor de texto antiguo. Para obtener el texto después de la actualización, use:fuente
[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]
fuente
Swift 3
Según la respuesta aceptada, lo siguiente debería funcionar en Swift 3 :
Nota
Ambos
String
yNSString
tienen métodos llamadosreplacingCharacters:inRange:withString
. Sin embargo, como se esperaba, el primero espera una instancia deRange
, mientras que el segundo espera una instancia deNSRange
. EltextField
método delegado usa unaNSRange
instancia, de ahí el uso deNSString
en este caso.fuente
replacingCharacters
debería serstringByReplacingCharactersInRange
En lugar de utilizar UITextFieldDelegate, intente utilizar el evento "Editing Changed" de UITextField.
fuente
En Swift (4), sin
NSString
(Swift puro):Como extensión:
fuente
Versión rápida para ello:
fuente
Este es el código que necesitas
fuente
usar guardia
fuente
Mi solución es usar
UITextFieldTextDidChangeNotification
.No olvide llamar
[[NSNotificationCenter defaultCenter] removeObserver:self];
aldealloc
método.fuente
Si necesita reemplazar el texto del campo de texto con esto, puede usar mi solución (Swift 3): https://gist.github.com/Blackjacx/2198d86442ec9b9b05c0801f4e392047
Después del reemplazo, puede
textField.text
recuperar el texto compuesto.fuente