Wie man Textänderungen in UITextField abfängt: Best Practices 2025

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum ist das Abfangen von Textänderungen die Grundlage?

\n\n

Stellen Sie sich vor: Sie schreiben eine App zum Suchen von Rezepten. Der Benutzer beginnt "Pasta" einzugeben, und Ihre Suche soll sofort auslösen, ohne dass ein Knopf gedrückt werden muss. Oder Sie erstellen ein Registrierungsformular, bei dem der Fehler "Passwort zu kurz" sofort hervorgehoben werden soll, sobald der Benutzer den dritten Buchstaben getippt hat.

\n\n

In beiden Fällen müssen Sie den genauen Zeitpunkt kennen, an dem sich der Text in UITextField geändert hat. Diese Frage auf Stack Overflow hat tausende Aufrufe – und das zu Recht. Jeder iOS-Entwickler stößt früher oder später darauf.

\n\n

Im Jahr 2025 haben wir mindestens 4 Möglichkeiten, diese Aufgabe zu lösen. Einige sind alte Hasen, die sich bewährt haben. Andere sind frische Ansätze, die Apple aktiv fördert. In diesem Artikel betrachten wir alle Varianten, von Klassik bis Modern, und ich zeige Ihnen, welche Methode Sie für welche Aufgabe wählen sollten.

\n\n

Los geht's! 🚀

\n\n

Methode 1. Target-Action: Altbewährt, aber funktioniert

\n\n

Die einfachste und verständlichste Methode, die seit iOS 2.0 funktioniert. Ja, sie ist über 15 Jahre alt, aber immer noch aktuell.

\n\n

Die Idee ist, dass UITextField von UIControl erbt und daher Ereignisse generieren kann. Uns interessiert das Ereignis .editingChanged – es wird bei jeder Textänderung ausgelöst.

\n\n

Codebeispiel (UIKit + Storyboard oder per Code)

\n\n
import UIKit\n\nclass ViewController: UIViewController {\n\n    @IBOutlet weak var searchTextField: UITextField!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Ziel für das Textänderungsereignis hinzufügen\n        searchTextField.addTarget(self,\n                                  action: #selector(textFieldDidChange(_:)),\n                                  for: .editingChanged)\n    }\n\n    @objc func textFieldDidChange(_ textField: UITextField) {\n        guard let text = textField.text else { return }\n        print("Text geändert: \\(text)")\n        // Hier können Sie Suche, Validierung usw. durchführen\n    }\n}
\n\n

Vorteile: minimaler Code, keine Protokollkonformität erforderlich, funktioniert schnell.

\n

Nachteile: Verwendung von @objc – das ist Legacy-Swift. Keine feine Kontrolle (z. B. kann nicht zwischen Texteinfügung und -löschung unterschieden werden).

\n\n

Methode 2. Delegat UITextFieldDelegate: Kontrolle über jedes Zeichen

\n\n

Wenn Sie nicht nur wissen müssen, dass sich der Text geändert hat, sondern die Änderung beeinflussen möchten (Eingabe blockieren, Telefonnummer formatieren), dann ist der Delegat Ihre Wahl.

\n\n

Die Schlüsselmethode hier ist textField(_:shouldChangeCharactersIn:replacementString:). Sie wird vor der tatsächlichen Textänderung aufgerufen.

\n\n

Beispiel: Telefonnummer formatieren

\n\n
import UIKit\n\nclass ViewController: UIViewController, UITextFieldDelegate {\n\n    @IBOutlet weak var phoneTextField: UITextField!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        phoneTextField.delegate = self\n    }\n\n    func textField(_ textField: UITextField,\n                   shouldChangeCharactersIn range: NSRange,\n                   replacementString string: String) -> Bool {\n\n        // Nur Ziffern erlauben\n        let allowedCharacters = CharacterSet.decimalDigits\n        let characterSet = CharacterSet(charactersIn: string)\n        guard allowedCharacters.isSuperset(of: characterSet) else {\n            return false\n        }\n\n        // Länge auf 10 Zeichen begrenzen\n        let currentText = textField.text ?? ""\n        guard let stringRange = Range(range, in: currentText) else { return false }\n        let updatedText = currentText.replacingCharacters(in: stringRange, with: string)\n        return updatedText.count <= 10\n    }\n\n    // Zusätzlich: den Moment abfangen, wenn der Text bereits geändert wurde\n    func textFieldDidChangeSelection(_ textField: UITextField) {\n        print("Text aktualisiert: \\(textFi                

Blogs

Buchempfehlungen