Estou usando o código abaixo para tentar textField2
atualizar o conteúdo de texto de para corresponder ao de textField1
sempre que o usuário digitar textField1
.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
No entanto, a saída que observo é que ...
textField2 é "12", quando textField1 é "123"
textField2 é "123", quando textField1 é "1234"
... quando o que eu quero é:
textField2 é "123", quando textField1 é "123"
textField2 é "1234", quando textField1 é "1234"
O que estou fazendo de errado?
ios
objective-c
uitextfield
user265961
fonte
fonte
Respostas:
-shouldChangeCharactersInRange
é chamado antes que o campo de texto realmente mude seu texto, é por isso que você está obtendo um valor de texto antigo. Para obter o texto após a atualização, use:fonte
[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]
fonte
Swift 3
Com base na resposta aceita, o seguinte deve funcionar no Swift 3 :
Nota
Ambos
String
eNSString
têm métodos chamadosreplacingCharacters:inRange:withString
. No entanto, como esperado, o primeiro espera uma instância deRange
, enquanto o último espera uma instância deNSRange
. OtextField
método delegado usa umaNSRange
instância, portanto, o uso deNSString
neste caso.fonte
replacingCharacters
deveria serstringByReplacingCharactersInRange
Em vez de usar o UITextFieldDelegate, tente usar o evento "Editing Changed" de UITextField.
fonte
Em Swift (4), sem
NSString
(Swift puro):Como uma extensão:
fonte
Versão rápida para isso:
fonte
Este é o código que você precisa,
fonte
usar guarda
fonte
Minha solução é usar
UITextFieldTextDidChangeNotification
.Não se esqueça de chamar
[[NSNotificationCenter defaultCenter] removeObserver:self];
nodealloc
método.fonte
Se você precisar substituir o texto do campo de texto por este, você pode usar minha solução (Swift 3): https://gist.github.com/Blackjacx/2198d86442ec9b9b05c0801f4e392047
Após a substituição, você pode simplesmente
textField.text
recuperar o texto composto.fonte