Ich verwende den folgenden Code, um zu versuchen textField2
, den Textinhalt bei textField1
jeder Eingabe durch den Benutzer so zu aktualisieren, dass er mit dem übereinstimmt textField1
.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
Die Ausgabe, die ich beobachte, ist jedoch, dass ...
textField2 ist "12", wenn textField1 "123" ist.
textField2 ist "123", wenn textField1 "1234" ist.
... wann ich will:
textField2 ist "123", wenn textField1 "123" ist.
textField2 ist "1234", wenn textField1 "1234" ist.
Was mache ich falsch?
ios
objective-c
uitextfield
user265961
quelle
quelle
Antworten:
-shouldChangeCharactersInRange
wird aufgerufen, bevor das Textfeld seinen Text tatsächlich ändert. Deshalb erhalten Sie den alten Textwert. Um den Text nach dem Update zu erhalten, verwenden Sie:quelle
[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]
quelle
Swift 3
Basierend auf der akzeptierten Antwort sollte in Swift 3 Folgendes funktionieren :
Hinweis
Beide
String
undNSString
haben Methoden aufgerufenreplacingCharacters:inRange:withString
. Wie erwartet erwartet der erstere jedoch eine Instanz vonRange
, während der letztere eine Instanz von erwartetNSRange
. DietextField
Delegate-Methode verwendet eineNSRange
Instanz, also die Verwendung vonNSString
in diesem Fall.quelle
replacingCharacters
sollte seinstringByReplacingCharactersInRange
Versuchen Sie, anstelle des UITextFieldDelegate das Ereignis "Editing Changed" von UITextField zu verwenden.
quelle
In Swift (4) ohne
NSString
(reines Swift):Als Erweiterung:
quelle
Schnelle Version dafür:
quelle
Dies ist der Code, den Sie benötigen,
quelle
Wache benutzen
quelle
Meine Lösung ist zu verwenden
UITextFieldTextDidChangeNotification
.Vergessen Sie nicht, rufen Sie
[[NSNotificationCenter defaultCenter] removeObserver:self];
indealloc
Methode.quelle
Wenn Sie den Textfeldtext durch diesen ersetzen müssen, können Sie meine Lösung (Swift 3) verwenden: https://gist.github.com/Blackjacx/2198d86442ec9b9b05c0801f4e392047
Nach dem Ersetzen können Sie einfach
textField.text
den zusammengesetzten Text abrufen.quelle