Ich versuche, Änderungen an einer UITextField
auf einer separaten UILabel
anzuzeigen. Gibt es eine Möglichkeit, nach jedem Zeichen, das der Benutzer eingibt, den vollständigen Text der UITextField
zu erfassen? Derzeit verwende ich diese Methode, erfasst jedoch nicht das letzte Zeichen, das der Benutzer eingegeben hat.
Ich weiß, dass UITextView
die Methode "didChange" hat, aber ich konnte diese Methode für eine UITextField
nicht finden.
//does not capture the last character
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self updateTextLabelsWithText: textField.text];
return YES;
}
Wie kann ich nach jedem eingegebenen Zeichen Text aus UITextField herausnehmen?
Vielen Dank!
UITextField
und UILabel
zu Storyboard/Feder hinzuIBOutlet
für UILabel
zuweisen (Hier habe ich myLabel verwendet)UITextFieldDelegate
dem Dateieigentümer zu. Implementieren Sie denselben Delegaten ebenfalls in der .h-DateiVerwenden Sie diese Codezeilen:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
[self updateTextLabelsWithText: newString];
return YES;
}
-(void)updateTextLabelsWithText:(NSString *)string
{
[myLabel setText:string];
}
Hoffe das hilft.
Behandeln Sie einfach das Event "Editing Changed"
[textField addTarget:self
action:@selector(editingChanged:)
forControlEvents:UIControlEventEditingChanged];
und der Wähler:
-(void) editingChanged:(id)sender {
// your code
}
Sie können dies manuell oder mit dem Storyboard durch STRG-Ziehen durchführen. Das Sent-Ereignis "Bearbeitung geändert" wird in Ihre .h-Datei gezogen, wodurch die Methode "itingChanged "für Sie erstellt wird.
In Swift 2.0+
class CheckInViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
yourTextField.delegate = self
}
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
var updatedTextString : NSString = textField.text as NSString
updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string)
self.methodYouWantToCallWithUpdatedString(updatedTextString)
return true
}
}
Hoffe, es hilft dir, schnelle Pioniere
Swift mit addTarget Swift 2.0+
titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)
Und implementiere selector
func textFieldTyping(textField:UITextField)
{
//Typing
}
In Swift 3.0:
Einige dieser Lösungen waren ein Zeichen hinter oder für frühere Versionen von Swift und Obj-C. Hier ist was ich für Swift 3.0 verwende
In der Klasse habe ich einen Platzhalter zum Speichern des Textes deklariert.
var tempName = ""
In ViewDidLoad habe ich verwendet:
nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)
Dann habe ich eine Funktion namens gemacht:
func typingName(textField:UITextField){
if let typedText = textField.text {
tempName = typedText
print(tempName)
}
}
Swift 3.0+: Das hat für mich sehr gut funktioniert.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
self.yourLabel.text = "\(textField.text ?? "")\(string)"
return true
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == yourTextFieldOutletName
{
if yourTextFieldOutletName.isEmpty == false
{
youtlabelname.text = yourTextFieldOutletName.text!
}
}
return true
}
func textViewDidEndEditing(_ textView: UITextView) {
if textField == yourTextFieldOutletName
{
if yourTextFieldOutletName.isEmpty == false
{
youtlabelname.text = yourTextFieldOutletName.text!
}
}
}