UITextField ist eine standardmäßige UIKit-Komponente für die einzeilige Texteingabe in iOS, die von UIControl erbt und eine breite Palette von Tastaturmodi unterstützt. Laut Apple Developer-Dokumentation (2025) stellt UITextField den Delegaten UITextFieldDelegate mit den Callbacks shouldBeginEditing, shouldChangeCharactersInRange und shouldReturn bereit. Im Gegensatz zu UITextView beschränkt UITextField die Eingabe auf eine einzelne Zeile und unterstützt secureTextEntry, leftView und rightView für benutzerdefinierte Steuerelemente. Dies ist das Hauptelement für Authentifizierungsformulare, Suche, Registrierung und Dateneingabe in iOS-Anwendungen.
Wichtige Punkte
UITextField ist eine Klasse des UIKit-Frameworks, die für die einzeilige Texteingabe durch den Benutzer entwickelt wurde. Die Klasse erbt von UIControl und ermöglicht das Abonnieren von Eingabeereignissen über den Target-Action-Mechanismus: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField zeigt einen Rahmen (borderStyle), Platzhaltertext, wenn das Feld leer ist, eine Löschtaste (clearButtonMode) und kann linke/rechte Hilfsansichten enthalten. Das Feld zeigt/versteckt die Tastatur automatisch beim Erhalten/Verlieren des Fokus über becomeFirstResponder und resignFirstResponder. Die Feldgröße wird durch intrinsicContentSize basierend auf Schriftart und Rahmenstil bestimmt. Um ein UITextField im Interface Builder (Storyboard/XIB) zu erstellen, verwenden Sie die Objektbibliothek; programmatisch verwenden Sie den Initialisierer UITextField(frame: CGRect). Die Klasse ist vollständig kompatibel mit der modernen iOS-Architektur: Combine-Publisher, @Published in SwiftUI über UIViewRepresentable und Diffable Data Source für Formulare.
UITextField unterstützt 12 Tastaturtypen über die Eigenschaft keyboardType. Jeder Typ optimiert den Zeichensatz für ein bestimmtes Eingabeszenario. UIKeyboardType.default — Standard-QWERTY-Tastatur. UIKeyboardType.numberPad — nur Ziffern ohne zusätzliche Symbole (ideal für PIN-Codes und Telefonnummern). UIKeyboardType.emailAddress — Tastatur mit @ und Punkt auf der Hauptebene. UIKeyboardType.URL — Tastatur mit .com, / und Punkt auf der Hauptebene. UIKeyboardType.phonePad — numerisches Tastenfeld mit +, *, # für die Eingabe von Telefonnummern. UIKeyboardType.decimalPad — Ziffern mit Dezimalpunkt für die Eingabe von Preisen. UIKeyboardType.webSearch — Tastatur mit Go-Taste optimiert für Suchanfragen. UIKeyboardType.asciiCapable — nur ASCII-Zeichen für lateinischen Text. Die Tastatur erscheint beim Aufruf von becomeFirstResponder und verschwindet beim Aufruf von resignFirstResponder. Der Tastaturtyp kann während der Bearbeitung dynamisch geändert werden.
| Typ | Szenario | Eigenschaften |
|---|---|---|
| default | Allgemeine Texteingabe | Standard QWERTY |
| numberPad | PIN, Code | Nur Ziffern 0-9 |
| emailAddress | @ und . auf Hauptebene | |
| URL | Webadresse | .com, /, . auf Haupt |
| phonePad | Telefon | Ziffern, +, *, # |
| decimalPad | Preis, Zahl | Ziffern + Dezimalpunkt |
UITextFieldDelegate ist ein Protokoll, das das Verhalten des Textfelds in verschiedenen Phasen der Eingabe definiert. Hauptmethoden: textFieldShouldBeginEditing(textField) — gibt einen Bool zurück, der den Beginn der Bearbeitung erlaubt oder verweigert; textFieldDidBeginEditing — wird aufgerufen, nachdem die Tastatur erscheint; textFieldShouldEndEditing — prüft, ob die Bearbeitung abgeschlossen werden kann (bei false verliert das Feld den Fokus nicht); textFieldDidEndEditing — wird aufgerufen, nachdem die Tastatur verschwindet; textFieldShouldChangeCharactersInRange — wird bei jeder Zeicheneingabe aufgerufen, ermöglicht das Filtern der Eingabe (nur ein Zeichen erlaubt, bei Rückgabe von false wird das Zeichen nicht hinzugefügt); textFieldShouldReturn — wird beim Drücken von Return/Go/Next/Search aufgerufen, um zum nächsten Feld zu wechseln. Der Delegat ist nicht optional: Alle Methoden haben eine Standardimplementierung, aber für benutzerdefiniertes Verhalten müssen Sie die entsprechende Methode überschreiben.
Die shouldReturn-Methode ist das Standardmuster zum Navigieren zwischen Formularfeldern. Implementierung: textFieldShouldReturn(textField) — prüfen Sie, welches textField das Ereignis ausgelöst hat, und verschieben Sie den Fokus über becomeFirstResponder() auf das nächste Feld. Wenn es das letzte Feld ist, rufen Sie resignFirstResponder() auf, um die Tastatur zu verstecken. Verwenden Sie IBOutlet-Collection oder separate IBOutlets für jedes Feld, um Feldreferenzen zu speichern.
isSecureTextEntry — eine UITextField-Eigenschaft, die bei true eingegebene Zeichen durch Punkte (•) ersetzt und das Kopieren von Text über UIMenuController blockiert. Wird für Passwortfelder, PIN-Codes, CVV verwendet. Beim Umschalten zwischen sicherem Modus und Klartext (show/hide password) setzen Sie textField.isSecureTextEntry.toggle(). Wichtig: Beim Ändern von isSecureTextEntry wird der Feldtext zurückgesetzt — speichern Sie ihn vorher. LeftView und RightView sind benutzerdefinierte UIViews, die innerhalb des Eingabefelds links oder rechts angezeigt werden. Typische Verwendung: ein Suchsymbol in leftView, eine „Löschen“-Schaltfläche in rightView. Konfiguration: textField.leftViewMode = always (immer) oder whileEditing (nur während der Bearbeitung). Left/right Views werden automatisch innerhalb des Textfelds unter Berücksichtigung des Abstands positioniert. Die Größe der Ansicht wird über bounds oder Auto Layout festgelegt.
import UIKit
class LoginViewController: UIViewController {
let passwordField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
passwordField.isSecureTextEntry = true
passwordField.placeholder = "Password"
passwordField.keyboardType = .asciiCapable
passwordField.delegate = self
// Benutzerdefinierter Passwort ein-/ausblenden Button
let showButton = UIButton(type: .system)
showButton.setTitle("Anzeigen", for: .normal)
showButton.addTarget(self, action: #selector(togglePasswordVisibility),
for: .touchUpInside)
passwordField.rightView = showButton
passwordField.rightViewMode = .always
}
@objc func togglePasswordVisibility() {
passwordField.isSecureTextEntry.toggle()
}
}
UITextInputTraits ist ein Protokoll, das das visuelle und verhaltensorientierte Erscheinungsbild der Tastatur für UITextField definiert. Haupteigenschaften: autocorrectionType (.default, .no, .yes) — aktiviert oder deaktiviert die Textautokorrektur; autocapitalizationType (.none, .words, .sentences, .allCharacters) — automatische Großschreibung für das erste Zeichen; spellCheckingType — Rechtschreibprüfung; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — Text der Return-Taste auf der Tastatur; enablesReturnKeyAutomatically — automatische Deaktivierung der Return-Taste bei leerem Feld. Für Namenseingabefelder verwenden Sie autocapitalizationType = .words; für E-Mail verwenden Sie autocorrectionType = .no; für URL verwenden Sie keyboardType = .URL + autocapitalizationType = .none. Die Traits werden nach der Initialisierung des Feldes vor seiner Anzeige konfiguriert. Eine dynamische Änderung der Traits aktualisiert die Tastatur bei ihrem nächsten Erscheinen.
Return Key Type definiert den Text der Taste auf der Tastatur: Next — zum nächsten Feld wechseln, Done — Eingabe abschließen, Search — Suche starten, Send — Formular absenden, Continue — mit dem Ausfüllen fortfahren. In Kombination mit der Delegatmethode shouldReturn ermöglicht returnKeyType eine natürliche UX: Der Benutzer füllt die Felder aus, drückt Next, um zum nächsten zu gelangen, und Done, um beim letzten Feld abzusenden. Für die Anpassung des Schaltflächentextes verwenden Sie UIButtonConfiguration in iOS 15+.
Der UITextField-Platzhalter ist der Text, der in Grau angezeigt wird, wenn das Feld leer ist. Konfiguration: textField.placeholder = "Enter email". Zum Anpassen der Farbe und Schriftart des Platzhalters verwenden Sie attributedPlaceholder mit NSAttributedString. Die Eingabemaske wird über die Delegatmethode shouldChangeCharactersInRange implementiert — unterstützt Telefonnummern-, Datums-, Kreditkarten- und SNILS-Formate. Die Eingabemaske ermöglicht die Trennung von Anzeige und Wert: Der Benutzer sieht formatierten Text (z. B. +7 (999) 999-99-99), während das Modell „79999999999“ speichert. Implementierungsbeispiel: Speichern Sie die Maske als Zeichenfolge mit X-Zeichen zum Ersetzen; bei jeder Eingabe erstellen Sie die formatierte Zeichenfolge und geben false in shouldChangeCharactersInRange zurück, wobei Sie den Feldtext über textField.text = formattedText ersetzen. Für Zahlen verwenden Sie NumberFormatter und den decimal keyboardType.
extension LoginViewController: UITextFieldDelegate {
func textFieldShouldReturn(
textField: UITextField
) -> Bool {
if textField == emailField {
passwordField.becomeFirstResponder()
} else if textField == passwordField {
textField.resignFirstResponder()
loginTapped()
}
return true
}
func textField(
textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
// Leerzeichen in E-Mail blockieren
if textField == emailField && string == " " {
return false
}
// Passwortlängenbegrenzung
if textField == passwordField {
let newLength = (textField.text?.count ?? 0) +
string.count - range.length
return newLength <= 32
}
return true
}
}
Betrachten wir ein vollständiges Beispiel für die Implementierung eines Anmeldeformulars mit UITextField, E-Mail-Validierung und visuellem Feedback. Das Formular enthält zwei Felder: emailField (emailAddress-Tastatur, keine Autokorrektur) und passwordField (secureTextEntry). Die Validierung erfolgt in shouldChangeCharactersInRange und zusätzlich beim Drücken der Login-Taste. Für visuelles Feedback: roter Rahmen (layer.borderColor) bei Fehler, grün — bei erfolgreicher Validierung. Zurücksetzen des Rahmens bei Bearbeitungsbeginn in textFieldDidBeginEditing.
Die E-Mail-Validierung erfolgt über NSPredicate mit dem Format "SELF MATCHES %@" und einem regulären Ausdruck zur grundlegenden Formatprüfung. Die tatsächliche Prüfung der E-Mail-Existenz sollte auf dem Server erfolgen. Für erweiterte Validierung verwenden Sie die Bibliothek SwiftValidators oder Combine-Publisher. Beispiel: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Der Feldrahmen wird über einen Animationsblock für einen sanften Übergang aktualisiert.
func validateEmail(textField: UITextField) {
guard let text = textField.text, !text.isEmpty else {
textField.layer.borderColor = UIColor.clear.cgColor
return
}
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.\\p{L}{2,}"
let predicate = NSPredicate(format: "SELF MATCHES [c] %@", emailRegex)
let isValid = predicate.evaluate(with: text)
UIView.animate(withDuration: 0.2) {
textField.layer.borderColor = isValid
? UIColor.systemGreen.cgColor
: UIColor.systemRed.cgColor
textField.layer.borderWidth = 1.0
textField.layer.cornerRadius = 6.0
}
}
Häufig gestellte Fragen
Verwenden Sie die Delegatmethode shouldChangeCharactersInRange. Berechnen Sie die neue Textlänge als existingText.count + newText.count - range.length und geben Sie false zurück, wenn das Limit überschritten wird. Alternativ: Abonnieren Sie das Ereignis editingChanged über addTarget und kürzen Sie den Text mit textField.text = String(text.prefix(maxLength)).
Überprüfen Sie: isUserInteractionEnabled = true (Standard), der Delegat gibt in shouldBeginEditing kein false zurück. Wenn sich das Feld in einem UIScrollView befindet, deaktivieren Sie delaysContentTouches. Wenn sich das Feld in einem modalen Controller befindet, überprüfen Sie, ob dieser Berührungen nicht blockiert. Für SwiftUI UIViewRepresentable überprüfen Sie, ob das Feld korrekt über DispatchQueue.main.async zum firstResponder wird.
Fügen Sie einen UITapGestureRecognizer auf self.view oder scrollView mit target-action hinzu, der view.endEditing(true) aufruft. Alternative: textField.resignFirstResponder() zum Verstecken der Tastatur eines bestimmten Feldes. Implementieren Sie touchesBegan in UIViewController oder verwenden Sie die Bibliothek IQKeyboardManager für automatische Tastaturverwaltung. Vergessen Sie nicht, cancelsTouchesInView für das korrekte Funktionieren der Schaltflächen zu deaktivieren.
Textfarbe: textField.textColor = UIColor.label. Schriftart: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Platzhalterfarbe: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).
Drei Möglichkeiten: isEnabled = false (ändert das Aussehen), isUserInteractionEnabled = false (behält den visuellen Stil bei) oder geben Sie false im Delegaten textFieldShouldBeginEditing zurück. Die dritte Methode ist vorzuziehen — sie blockiert die Eingabe, ohne den visuellen Stil zu ändern. Zum programmatischen Setzen von Text im schreibgeschützten Modus verwenden Sie den Delegaten.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch