642 Stimmen

UITextField Textänderung Ereignis

Wie kann ich Textänderungen in einem textField erkennen? Die Delegatenmethode shouldChangeCharactersInRange funktioniert für irgendetwas, aber es hat meinen Bedarf nicht genau erfüllt. Denn solange es nicht YES zurückgibt, sind die textField-Texte für andere Beobachtermethoden nicht verfügbar.

z.B. in meinem Code calculateAndUpdateTextFields nicht den aktualisierten Text erhalten hat, hat der Benutzer getippt.

Gibt es eine Möglichkeit, etwas zu bekommen wie textChanged Java-Ereignishandler.

- (BOOL)textField:(UITextField *)textField 
            shouldChangeCharactersInRange:(NSRange)range 
            replacementString:(NSString *)string 
{
    if (textField.tag == kTextFieldTagSubtotal 
        || textField.tag == kTextFieldTagSubtotalDecimal
        || textField.tag == kTextFieldTagShipping
        || textField.tag == kTextFieldTagShippingDecimal) 
    {
        [self calculateAndUpdateTextFields];

    }

    return YES;
}

0voto

Mojtaba Hosseini Punkte 68078

SwiftUI

Wenn Sie die native SwiftUI verwenden TextField oder einfach das UIKit verwenden UITextField ( So geht's ), können Sie auf Textänderungen achten:

SwiftUI 2.0

Ab iOS 14, macOS 11 oder jedem anderen Betriebssystem, das SwiftUI 2.0 enthält, gibt es einen neuen Modifikator namens .onChange die jede Änderung der gegebenen state :

struct ContentView: View {
    @State var text: String = ""

    var body: some View {
        TextField("Enter text here", text: $text)
            .onChange(of: text) {
                print($0) // You can do anything due to the change here.
                // self.autocomplete($0) // like this
            }
    }
}

SwiftUI 1.0

Für ältere iOS- und andere SwiftUI 1.0-Plattformen können Sie onReceive mit Hilfe des Mähdrescher Rahmen:

import Combine

.onReceive(Just(text)) { 
    print($0)
}

Beachten Sie, dass Sie <strong>puede </strong>verwenden. <code>text.publisher</code> anstelle von <code>Just(text)</code> aber es gibt zurück <strong>die Veränderung </strong>anstelle des gesamten Wertes.

-1voto

Valeriy Punkte 723

Swift 4 Version

Schlüssel-Wert-Beobachtung verwenden Benachrichtigung von Objekten über Änderungen an den Eigenschaften anderer Objekte.

var textFieldObserver: NSKeyValueObservation?

textFieldObserver = yourTextField.observe(\.text, options: [.new, .old]) { [weak self] (object, changeValue) in
  guard let strongSelf = self else { return }
  print(changeValue)
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X