UITextField — ce este, configurarea câmpului de introducere și principiul de funcționare

Autor: IT Sectr Publicat: 2026-07-06 Timp de citire: 8 min

UITextField — este o componentă standard UIKit pentru introducerea textului pe o singură linie în iOS, care moștenește UIControl și acceptă o gamă largă de moduri de tastatură. Conform documentației Apple Developer (2025), UITextField oferă delegatul UITextFieldDelegate cu callback-uri shouldBeginEditing, shouldChangeCharactersInRange și shouldReturn. Spre deosebire de UITextView, UITextField limitează introducerea la o singură linie și acceptă secureTextEntry, leftView și rightView pentru controale personalizate. Acesta este elementul principal pentru formularele de autentificare, căutare, înregistrare și introducere a datelor în aplicațiile iOS.

Principalele

  • UITextField — câmp de introducere text pe o singură linie UIKit cu suport pentru delegat și tastaturi personalizate
  • UIKeyboardType — 12 tipuri de tastatură: numberPad, emailAddress, URL, phonePad și altele
  • UITextFieldDelegate — gestionarea ciclului de viață al intrării prin callback-uri shouldBegin/End/Change
  • Secure Text Entry — modul de introducere a parolei cu înlocuirea caracterelor cu puncte prin isSecureTextEntry
  • Left/Right View — pictograme și butoane personalizate în interiorul câmpului de introducere pentru îmbunătățiri UX

Ce este UITextField

UITextField — este o clasă a framework-ului UIKit destinată introducerii textului pe o singură linie de către utilizator. Clasa moștenește UIControl, ceea ce permite abonarea la evenimente de intrare prin mecanismul target-action: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField afișează marginea (borderStyle), textul placeholder când câmpul este gol, butonul de ștergere (clearButtonMode) și poate conține vizualizări auxiliare stânga/dreapta. Câmpul afișează/ascunde automat tastatura la primirea/pierderea focusului prin becomeFirstResponder și resignFirstResponder. Dimensiunea câmpului este determinată de intrinsicContentSize pe baza font și border style. Pentru a crea UITextField în Interface Builder (Storyboard/XIB) se utilizează Object Library, programatic — prin inițializatorul UITextField(frame: CGRect). Clasa este complet compatibilă cu arhitectura modernă iOS: Combine publishers, @Published în SwiftUI prin UIViewRepresentable și Diffable Data Source pentru formulare.

Tipuri de tastatură UIKeyboardType

UITextField acceptă 12 tipuri de tastatură prin proprietatea keyboardType. Fiecare tip optimizează setul de caractere pentru un scenariu specific de introducere. UIKeyboardType.default — tastatura standard QWERTY. UIKeyboardType.numberPad — doar cifre fără caractere suplimentare (ideală pentru coduri PIN și numere de telefon). UIKeyboardType.emailAddress — tastatură cu caracterul @ și punctul pe stratul principal. UIKeyboardType.URL — tastatură cu .com, / și . pe stratul principal. UIKeyboardType.phonePad — tastatură numerică cu +, *, # pentru introducerea numerelor de telefon. UIKeyboardType.decimalPad — cifre cu punct zecimal pentru introducerea prețurilor. UIKeyboardType.webSearch — tastatură cu butonul Go și optimizare pentru interogări de căutare. UIKeyboardType.asciiCapable — doar caractere ASCII pentru alfabetul latin. Tastatura este afișată la apelarea becomeFirstResponder și ascunsă la resignFirstResponder. Tipul tastaturii poate fi schimbat dinamic în timpul editării.

TipScenariuCaracteristici
defaultIntroducere text generalăQWERTY standard
numberPadPIN, codDoar cifre 0-9
emailAddressEmail@ și . pe stratul principal
URLAdresă web.com, /, . pe principal
phonePadTelefonCifre, +, *, #
decimalPadPreț, numărCifre + punct zecimal

Delegatul UITextFieldDelegate și metodele sale

UITextFieldDelegate — este un protocol care definește comportamentul câmpului text în diferite etape ale intrării. Metodele principale: textFieldShouldBeginEditing(textField) — returnează Bool, permițând sau interzicând începerea editării; textFieldDidBeginEditing — este apelată după apariția tastaturii; textFieldShouldEndEditing — verifică dacă editarea poate fi finalizată (la false câmpul nu pierde focusul); textFieldDidEndEditing — este apelată după ascunderea tastaturii; textFieldShouldChangeCharactersInRange — este apelată la fiecare introducere de caracter, permite filtrarea intrării (doar un caracter permis, dacă returnează false — caracterul nu se adaugă); textFieldShouldReturn — este apelată la apăsarea Return/Go/Next/Search, utilizată pentru trecerea la următorul câmp. Delegatul nu este Optional: toate metodele au implementare implicită, dar pentru comportament personalizat trebuie să suprascrieți metoda corespunzătoare.

Gestionarea focusului prin shouldReturn

Metoda shouldReturn — modelul standard pentru navigarea între câmpurile formularului. Implementare: textFieldShouldReturn(textField) — verificăm care textField a declanșat evenimentul și transferăm focusul la următorul câmp prin becomeFirstResponder(). Dacă acesta este ultimul câmp — apelăm resignFirstResponder() pentru ascunderea tastaturii. Pentru stocarea referințelor la câmpuri utilizați IBOutlet collection sau IBOutlet separate pentru fiecare câmp.

Secure Text Entry și left/right view personalizate

isSecureTextEntry — proprietatea UITextField care la true înlocuiește caracterele introduse cu puncte (•) și blochează copierea textului prin UIMenuController. Utilizată pentru câmpurile de parolă, PIN, CVV. La comutarea între modul securizat și textul obișnuit (show/hide password) setați textField.isSecureTextEntry.toggle(). Important: la schimbarea isSecureTextEntry textul câmpului este resetat — salvați-l în prealabil. LeftView și RightView — sunt UIView-uri personalizate afișate în interiorul câmpului de introducere în stânga sau dreapta. Utilizare tipică: pictograma de căutare în leftView, butonul "Șterge" în rightView. Configurare: textField.leftViewMode = always (întotdeauna) sau whileEditing (doar la editare). Left/right view sunt poziționate automat în interiorul câmpului text ținând cont de padding. Dimensiunea view este determinată de bounds sau Auto Layout.

swift
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

        // Buton personalizat pentru afișarea/ascunderea parolei
        let showButton = UIButton(type: .system)
        showButton.setTitle("Afișează", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

    @objc func togglePasswordVisibility() {
        passwordField.isSecureTextEntry.toggle()
    }
}

Configurarea UITextInputTraits

UITextInputTraits — este un protocol care definește ajustarea vizuală și comportamentală a tastaturii pentru UITextField. Proprietăți principale: autocorrectionType (.default, .no, .yes) — activează sau dezactivează autocorectarea textului; autocapitalizationType (.none, .words, .sentences, .allCharacters) — Caps Lock automat pentru primul caracter; spellCheckingType — verificare ortografică; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — textul butonului Return pe tastatură; enablesReturnKeyAutomatically — blocarea automată a butonului Return la câmpul gol. Pentru câmpurile de introducere a numelui utilizați autocapitalizationType = .words, pentru email — autocorrectionType = .no, pentru URL — keyboardType = .URL + autocapitalizationType = .none. Configurarea traits se efectuează după inițializarea câmpului înainte de afișarea acestuia. Modificarea traits actualizează dinamic tastatura la următoarea apariție.

Return Key Type și navigarea în formular

Return Key Type determină textul butonului de pe tastatură: Next — trecere la următorul câmp, Done — finalizare introducere, Search — pornire căutare, Send — trimitere formular, Continue — continuare completare. În combinație cu metoda delegatului shouldReturn, returnKeyType permite crearea unui UX natural: utilizatorul completează câmpurile, apăsând Next pentru a trece la următorul și Done pentru a trimite pe ultimul câmp. Pentru personalizarea textului butonului utilizați UIButtonConfiguration în iOS 15+.

Placeholder, formatare și mască de introducere

Placeholder UITextField — este textul afișat cu gri când câmpul este gol. Configurare: textField.placeholder = "Enter email". Pentru personalizarea culorii și fontului placeholder utilizați attributedPlaceholder cu NSAttributedString. Masca de introducere este implementată prin metoda delegatului shouldChangeCharactersInRange — formatul numărului de telefon, datei, cărții de credit, SNILS este acceptat. Masca de introducere permite separarea afișării de valoare: utilizatorul vede textul formatat (de exemplu, +7 (999) 999-99-99), iar în model se stochează "79999999999". Exemplu de implementare: stocăm masca ca șir de caractere cu simboluri X pentru înlocuire; la fiecare introducere creăm șirul formatat și returnăm false în shouldChangeCharactersInRange, înlocuind textul câmpului prin textField.text = formattedText. Pentru numere utilizați NumberFormatter și decimal keyboardType.

swift
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 {
        // Blocarea spațiilor în email
        if textField == emailField && string == " " {
            return false
        }
        // Limită lungime parolă
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

Exemple de cod: validare și formular

Să analizăm un exemplu complet de implementare a unui formular de autentificare cu UITextField, validare email și feedback vizual. Formularul conține două câmpuri: emailField (tastatură emailAddress, fără autocorectare) și passwordField (secureTextEntry). Validarea se efectuează în shouldChangeCharactersInRange și suplimentar la apăsarea butonului Login. Pentru feedback vizual: margine roșie (layer.borderColor) la eroare, verde — la validare reușită. Resetarea marginii la începerea editării în textFieldDidBeginEditing.

Validare email cu expresie regulată

Validarea email se efectuează prin NSPredicate cu formatul "SELF MATCHES %@" și o expresie regulată pentru verificarea de bază a formatului. Verificarea reală a existenței emailului trebuie efectuată pe server. Pentru validare avansată utilizați biblioteca SwiftValidators sau Combine publishers. Exemplu: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Marginea câmpului este actualizată prin animation block pentru o tranziție lină.

swift
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
    }
}

Întrebări frecvente

Cum să limitați numărul de caractere în UITextField?

Utilizați metoda delegatului shouldChangeCharactersInRange. Calculați noua lungime a textului ca existingText.count + newText.count - range.length și returnați false dacă limita a fost depășită. Alternativ: abonați-vă la evenimentul editingChanged prin addTarget și trunchiați textul prin textField.text = String(text.prefix(maxLength)).

De ce UITextField nu reacționează la atingere?

Verificați: isUserInteractionEnabled = true (implicit), delegatul nu returnează false în shouldBeginEditing. Dacă câmpul se află în interiorul UIScrollView — dezactivați delaysContentTouches. Dacă câmpul este într-un controler modal — verificați că nu blochează atingerile. Pentru SwiftUI UIViewRepresentable verificați că câmpul devine corect firstResponder prin DispatchQueue.main.async.

Cum să ascundeți tastatura la atingerea în afara UITextField?

Adăugați UITapGestureRecognizer la self.view sau scrollView cu target-action care apelează view.endEditing(true). Alternativă: textField.resignFirstResponder() pentru ascunderea tastaturii unui anumit câmp. Configurați touchesBegan în UIViewController sau utilizați biblioteca IQKeyboardManager pentru gestionarea automată a tastaturii. Nu uitați să dezactivați cancelsTouchesInView pentru funcționarea corectă a butoanelor.

Cum să schimbați culoarea textului și fontul UITextField?

Culoarea textului: textField.textColor = UIColor.label. Fontul: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Culoarea placeholder: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

Cum să faceți UITextField doar pentru citire?

Trei moduri: isEnabled = false (schimbă aspectul), isUserInteractionEnabled = false (păstrează stilul vizual) sau returnați false în textFieldShouldBeginEditing al delegatului. Al treilea mod este preferat — blochează introducerea fără a schimba stilul vizual. Pentru setarea programatică a textului în modul doar citire utilizați delegatul.

Rezumat

  • UITextField — câmp de introducere text pe o singură linie UIKit cu moștenire UIControl și gestionare prin delegat
  • UIKeyboardType — 12 tipuri de tastatură pentru diferite scenarii: email, URL, numberPad, phonePad
  • UITextFieldDelegate — protocol cu metodele shouldBegin/End/Change/Return pentru gestionarea intrării
  • Secure Text Entry — modul parolă prin isSecureTextEntry cu înlocuirea caracterelor cu puncte
  • Left/Right View — elemente personalizate în interiorul câmpului (pictograme, butoane) cu moduri always/whileEditing
  • Return Key Type — configurarea butonului Return: Next, Done, Search, Send pentru navigare în formular
  • Validare — prin shouldChangeCharactersInRange cu regex și feedback vizual prin margine
  • Placeholder se configurează prin attributedPlaceholder cu NSAttributedString pentru stil personalizat

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și