Az UITextField egy szabványos UIKit komponens egysoros szövegbevitelhez iOS-ben, amely a UIControlból származik és a billentyűzet módok széles skáláját támogatja. Az Apple Developer (2025) dokumentáció szerint az UITextField a UITextFieldDelegate delegáltat biztosítja a shouldBeginEditing, shouldChangeCharactersInRange és shouldReturn callback-ekkel. Az UITextView-val ellentétben az UITextField egy sorra korlátozza a bevitelt és támogatja a secureTextEntry, leftView és rightView tulajdonságokat egyedi vezérlőkhöz. Ez a fő elem a bejelentkezési, keresési, regisztrációs és adatbeviteli űrlapokhoz iOS alkalmazásokban.
Főbb pontok
UITextField — a UIKit keretrendszer egy osztálya, amely egysoros szöveg felhasználó általi bevitelére szolgál. Az osztály a UIControlból származik, ami lehetővé teszi a beviteli eseményekre való feliratkozást a target-action mechanizmuson keresztül: addTarget(self, action: Selector("textChanged:"), for: editingChanged). Az UITextField keretet (borderStyle), helyőrző szöveget üres mező esetén, törlő gombot (clearButtonMode) jelenít meg, és tartalmazhat bal/jobb segéd nézeteket. A mező automatikusan megjeleníti/elrejti a billentyűzetet a fókusz felvételekor/elveszítésekor a becomeFirstResponder és resignFirstResponder segítségével. A mező méretét az intrinsicContentSize határozza meg a font és border style alapján. UITextField létrehozásához az Interface Builder-ben (Storyboard/XIB) az Object Library-t használjuk, programozottan — az UITextField(frame: CGRect) inicializátoron keresztül. Az osztály teljes mértékben kompatibilis a modern iOS architektúrával: Combine publishers, @Published SwiftUI-ben UIViewRepresentable-en keresztül és Diffable Data Source űrlapokhoz.
UITextField 12 billentyűzettípust támogat a keyboardType tulajdonságon keresztül. Minden típus optimalizálja a karakterkészletet egy adott beviteli forgatókönyvhöz. UIKeyboardType.default — szabványos QWERTY billentyűzet. UIKeyboardType.numberPad — csak számjegyek további karakterek nélkül (ideális PIN-kódokhoz és telefonszámokhoz). UIKeyboardType.emailAddress — billentyűzet @ jellel és ponttal a fő rétegen. UIKeyboardType.URL — billentyűzet .com, / és . karakterekkel a fő rétegen. UIKeyboardType.phonePad — numerikus billentyűzet +, *, # karakterekkel telefonszámok beviteléhez. UIKeyboardType.decimalPad — számjegyek tizedes ponttal árak beviteléhez. UIKeyboardType.webSearch — billentyűzet Go gombbal és optimalizálással keresési lekérdezésekhez. UIKeyboardType.asciiCapable — csak ASCII karakterek a latin ábécéhez. A billentyűzet a becomeFirstResponder hívásakor jelenik meg és a resignFirstResponder hívásakor elrejtőzik. A billentyűzet típusa dinamikusan változtatható szerkesztés közben.
| Típus | Forgatókönyv | Jellemzők |
|---|---|---|
| default | Általános szövegbevitel | Szabványos QWERTY |
| numberPad | PIN, kód | Csak 0-9 számjegyek |
| emailAddress | @ és . a fő rétegen | |
| URL | Webcím | .com, /, . a fő rétegen |
| phonePad | Telefon | Számjegyek, +, *, # |
| decimalPad | Ár, szám | Számjegyek + tizedes pont |
UITextFieldDelegate — egy protokoll, amely meghatározza a szöveges mező viselkedését a bevitel különböző szakaszaiban. Fő metódusok: textFieldShouldBeginEditing(textField) — Bool értéket ad vissza, engedélyezve vagy megtiltva a szerkesztés megkezdését; textFieldDidBeginEditing — a billentyűzet megjelenése után hívódik meg; textFieldShouldEndEditing — ellenőrzi, hogy a szerkesztés befejezhető-e (false esetén a mező nem veszíti el a fókuszt); textFieldDidEndEditing — a billentyűzet elrejtése után hívódik meg; textFieldShouldChangeCharactersInRange — minden karakter bevitelekor meghívódik, lehetővé teszi a bevitel szűrését (csak egy karakter engedélyezett, ha false-t ad vissza — a karakter nem kerül hozzáadásra); textFieldShouldReturn — a Return/Go/Next/Search megnyomásakor hívódik meg, a következő mezőre ugráshoz használatos. A delegált nem Optional: minden metódusnak van alapértelmezett implementációja, de egyedi viselkedéshez felül kell írni a megfelelő metódust.
shouldReturn metódus — a szabványos minta az űrlapmezők közötti navigációhoz. Implementáció: textFieldShouldReturn(textField) — ellenőrizzük, melyik textField váltotta ki az eseményt, és áthelyezzük a fókuszt a következő mezőre a becomeFirstResponder() segítségével. Ha ez az utolsó mező — meghívjuk a resignFirstResponder()-t a billentyűzet elrejtéséhez. A mezőkre való hivatkozások tárolásához használjon IBOutlet collection-t vagy külön IBOutlet-et minden mezőhöz.
isSecureTextEntry — az UITextField tulajdonsága, amely true érték esetén a bevitt karaktereket pontokkal (•) helyettesíti, és blokkolja a szöveg másolását az UIMenuController-en keresztül. Jelszó, PIN-kód, CVV mezőkhöz használatos. A biztonságos mód és a normál szöveg közötti váltáskor (show/hide password) állítsa be a textField.isSecureTextEntry.toggle() értéket. Fontos: az isSecureTextEntry megváltoztatásakor a mező szövege visszaáll — mentse el előzőleg. LeftView és RightView — egyedi UIView-ek, amelyek a beviteli mezőn belül balra vagy jobbra jelennek meg. Tipikus használat: keresőikon a leftView-ben, "Törlés" gomb a rightView-ben. Beállítás: textField.leftViewMode = always (mindig) vagy whileEditing (csak szerkesztéskor). A left/right view automatikusan pozicionálódik a szöveges mezőn belül, figyelembe véve a padding-et. A view méretét a bounds vagy Auto Layout határozza meg.
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
// Egyéni gomb jelszó megjelenítéséhez/elrejtéséhez
let showButton = UIButton(type: .system)
showButton.setTitle("Mutat", for: .normal)
showButton.addTarget(self, action: #selector(togglePasswordVisibility),
for: .touchUpInside)
passwordField.rightView = showButton
passwordField.rightViewMode = .always
}
@objc func togglePasswordVisibility() {
passwordField.isSecureTextEntry.toggle()
}
}
UITextInputTraits — egy protokoll, amely meghatározza a billentyűzet vizuális és viselkedési beállítását az UITextField számára. Fő tulajdonságok: autocorrectionType (.default, .no, .yes) — be- vagy kikapcsolja a szöveg automatikus javítását; autocapitalizationType (.none, .words, .sentences, .allCharacters) — automatikus Caps Lock az első karakterhez; spellCheckingType — helyesírás-ellenőrzés; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — a Return gomb szövege a billentyűzeten; enablesReturnKeyAutomatically — a Return gomb automatikus blokkolása üres mező esetén. Névbeviteli mezőkhöz használjon autocapitalizationType = .words, emailhez — autocorrectionType = .no, URL-hez — keyboardType = .URL + autocapitalizationType = .none értéket. A traits beállítása a mező inicializálása után, a megjelenítés előtt történik. A traits megváltoztatása dinamikusan frissíti a billentyűzetet a következő megjelenéskor.
Return Key Type határozza meg a gomb szövegét a billentyűzeten: Next — ugrás a következő mezőre, Done — bevitel befejezése, Search — keresés indítása, Send — űrlap küldése, Continue — kitöltés folytatása. A shouldReturn delegált metódussal kombinálva a returnKeyType természetes UX létrehozását teszi lehetővé: a felhasználó kitölti a mezőket, a Next-re kattintva a következőre lép, és a Done-ra az utolsó mezőn a küldéshez. A gomb szövegének testreszabásához használja az UIButtonConfiguration-t iOS 15+ rendszerben.
Placeholder UITextField — a szürke színnel megjelenő szöveg, amikor a mező üres. Beállítás: textField.placeholder = "Enter email". A placeholder színének és betűtípusának testreszabásához használja az attributedPlaceholder tulajdonságot NSAttributedString-el. Beviteli maszk a shouldChangeCharactersInRange delegált metóduson keresztül valósul meg — a telefonszám, dátum, bankkártya, SNILS formátum támogatott. A beviteli maszk lehetővé teszi a megjelenítés és az érték szétválasztását: a felhasználó formázott szöveget lát (pl. +7 (999) 999-99-99), míg a modellben a "79999999999" tárolódik. Implementációs példa: a maszkot X helyettesítő karakterekkel rendelkező karakterláncként tároljuk; minden bevitelkor létrehozzuk a formázott karakterláncot, és false-t adunk vissza a shouldChangeCharactersInRange-ben, a mező szövegét a textField.text = formattedText segítségével helyettesítve. Számokhoz használja a NumberFormatter-t és a decimal keyboardType-ot.
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 {
// Szóközök blokkolása az emailben
if textField == emailField && string == " " {
return false
}
// Jelszó hosszának korlátozása
if textField == passwordField {
let newLength = (textField.text?.count ?? 0) +
string.count - range.length
return newLength <= 32
}
return true
}
}
Tekintsünk egy teljes példát a bejelentkezési űrlap implementációjára UITextField-fel, email érvényesítéssel és vizuális visszajelzéssel. Az űrlap két mezőt tartalmaz: emailField (emailAddress billentyűzet, nincs automatikus javítás) és passwordField (secureTextEntry). Az érvényesítés a shouldChangeCharactersInRange-ben és a Login gomb megnyomásakor történik. Vizuális visszajelzéshez: piros keret (layer.borderColor) hiba esetén, zöld — sikeres érvényesítéskor. A keret visszaállítása a szerkesztés megkezdésekor a textFieldDidBeginEditing-ben.
Email érvényesítés a NSPredicate-en keresztül történik "SELF MATCHES %@" formátummal és reguláris kifejezéssel a formátum alapellenőrzéséhez. Az email létezésének tényleges ellenőrzését a szerveren kell elvégezni. Fejlett érvényesítéshez használja a SwiftValidators könyvtárat vagy a Combine publishers-eket. Példa: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). A mező kerete az animation block-on keresztül frissül a sima átmenet érdekében.
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
}
}
Gyakran Ismételt Kérdések
Használja a shouldChangeCharactersInRange delegált metódust. Számítsa ki az új szöveghosszt a következőképpen: existingText.count + newText.count - range.length, és adjon vissza false-t, ha a határ túl lett lépve. Alternatíva: iratkozzon fel az editingChanged eseményre az addTarget segítségével, és vágja le a szöveget a textField.text = String(text.prefix(maxLength)) segítségével.
Ellenőrizze: isUserInteractionEnabled = true (alapértelmezett), a delegált nem ad vissza false-t a shouldBeginEditing-ben. Ha a mező UIScrollView-n belül van — kapcsolja ki a delaysContentTouches-t. Ha a mező modális vezérlőben van — ellenőrizze, hogy nem blokkolja-e az érintéseket. SwiftUI UIViewRepresentable esetén ellenőrizze, hogy a mező megfelelően firstResponder lesz-e a DispatchQueue.main.async segítségével.
Adjon hozzá UITapGestureRecognizer-t a self.view-hoz vagy scrollView-hoz egy target-action-nel, ami meghívja a view.endEditing(true) függvényt. Alternatíva: textField.resignFirstResponder() egy adott mező billentyűzetének elrejtéséhez. Konfigurálja a touchesBegan-t UIViewController-ben, vagy használja az IQKeyboardManager könyvtárat automatikus billentyűzetkezeléshez. Ne felejtse el kikapcsolni a cancelsTouchesInView-t a gombok helyes működéséhez.
Szöveg színe: textField.textColor = UIColor.label. Betűtípus: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Placeholder színe: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).
Három mód: isEnabled = false (megváltoztatja a megjelenést), isUserInteractionEnabled = false (megőrzi a vizuális stílust) vagy adjon vissza false-t a delegált textFieldShouldBeginEditing metódusában. A harmadik mód az előnyösebb — blokkolja a bevitelt a vizuális stílus megváltoztatása nélkül. A szöveg programozott beállításához csak olvasható módban használja a delegáltat.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is