Estoy usando el siguiente código para intentar que textField2el contenido de texto se actualice para que coincida textField1cada 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:
-shouldChangeCharactersInRangese 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
StringyNSStringtienen métodos llamadosreplacingCharacters:inRange:withString. Sin embargo, como se esperaba, el primero espera una instancia deRange, mientras que el segundo espera una instancia deNSRange. EltextFieldmétodo delegado usa unaNSRangeinstancia, de ahí el uso deNSStringen este caso.fuente
replacingCharactersdebería serstringByReplacingCharactersInRangeEn 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];aldeallocmé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.textrecuperar el texto compuesto.fuente