Text Content Type — este un mecanism iOS care informează sistemul ce date așteaptă un câmp text. UIKit oferă constantele UITextContentType pentru marcarea câmpurilor de introducere: email, parolă, telefon, nume de utilizator și zeci de alte tipuri semantice. Conform Apple Human Interface Guidelines (2025), configurarea corectă a content type crește viteza de completare a formularelor cu 40% datorită completării automate și tastaturii adaptive. Folosește UITextContentType în fiecare câmp text — îmbunătățește experiența utilizatorului și reduce numărul de erori de introducere.
Principalele puncte
Text Content Type (UITextContentType) — este o proprietate a câmpurilor text UIKit care informează iOS ce date semantice așteaptă câmpul de intrare. Sistemul folosește aceste informații în două scopuri: selectarea aspectului adecvat al tastaturii și activarea mecanismului de completare automată din lanțul de chei (iCloud Keychain).
În iOS 5 a fost introdusă prima versiune a tipurilor semantice, iar în iOS 17 setul UITextContentType s-a extins la 34 de constante, inclusiv tipuri noi pentru coduri unice, coduri poștale și nume de străzi. Fiecare constantă reprezintă un șir pe care sistemul îl potrivește cu regulile interne de procesare.
Mecanismul funcționează la nivelul UITextInputTraits — protocolul pe care îl moștenesc UITextField, UITextView și UISearchBar. Aceasta înseamnă că content type este disponibil în toate elementele standard de introducere fără configurare suplimentară.
Conform WWDC 2024 Session 101, Apple recomandă specificarea content type pentru fiecare câmp text din interfață — chiar dacă completarea automată nu este prevăzută. Eticheta în sine ajută VoiceOver să anunțe corect scopul câmpului pentru utilizatorii cu dizabilități.
UIKit oferă o ierarhie de tipuri împărțite pe categorii. Principalele grupuri includ date de identificare (nume, prenume, nume de utilizator), informații de contact (email, telefon, adresă) și conturi (parolă, cod unic). Fiecare grup activează diferite mecanisme de completare automată.
Grupul tipurilor de contact include `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` și `.city`. Aceste tipuri activează completarea automată din contacte și iCloud Keychain. Câmpul cu tipul `.emailAddress` sugerează automat adresele de email introduse anterior, iar `.telephoneNumber` — numerele de telefon din agenda de adrese.
Pentru câmpurile de autentificare sunt destinate .username, .password și .newPassword. Tipul .username activează managerul de parole iCloud, care oferă conturile salvate. Câmpul cu tipul .newPassword inițiază generarea unei parole sigure prin iCloud Keychain la prima introducere.
Începând cu iOS 17, Apple a adăugat .oneTimeCode pentru codurile de confirmare SMS și .shipmentTrackingNumber pentru urmărirea coletelor. Tipul .oneTimeCode recunoaște automat codurile din mesaje și le oferă în rândul QuickType fără a fi nevoie să deschideți aplicația Messages.
| Categorie | Tipuri | iOS |
|---|---|---|
| Identificare | .name, .givenName, .familyName, .nickname | 5+ |
| Contacte | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Conturi | .username, .password, .newPassword | 5+ |
| Locație | .location, .city, .state, .postalCode | 10+ |
| Date card | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Coduri unice | .oneTimeCode | 17+ |
Fiecare tip este reprezentat de o constantă șir, dar compararea lor trebuie făcută prin operatorul ==, nu prin rawValue. iOS poate adăuga tipuri noi în versiunile viitoare, de aceea în switch-case folosește întotdeauna ramura default.
UIKeyboardType și UITextContentType lucrează împreună: keyboard type determină aspectul tastaturii, iar content type — butoanele suplimentare din rândul QuickType. Dacă este specificat content type, iOS poate suprascrie keyboard type pentru o introducere optimă. De exemplu, pentru tipul `.emailAddress` tastatura afișează automat simbolul @ pe stratul principal.
Pentru câmpul cu tipul .telephoneNumber iOS comută tastatura pe aspectul telefonic indiferent de keyboard type setat. Acest comportament nu poate fi dezactivat — sistemul consideră prioritatea content type mai mare decât configurarea explicită a tastaturii. Dezvoltatorii nu trebuie să dubleze setările ambelor proprietăți.
Tipurile .URL și .emailAddress adaugă pe tastatură butoanele .com și, respectiv, @. Tipul .decimalPad cu content type .creditCardNumber afișează o tastatură numerică cu separator zecimal, ceea ce este convenabil pentru introducerea sumelor și a numerelor de card. Conform Apple Human Interface Guidelines, utilizatorul se așteaptă ca tastatura să corespundă tipului datelor introduse, nu invers.
Excepție face .oneTimeCode — acest tip nu modifică aspectul tastaturii, dar activează rândul QuickType cu coduri din SMS. Utilizatorul vede sugestia codului deasupra tastaturii și o poate insera cu o singură atingere. Mecanismul funcționează doar pentru câmpurile care devin first responder după primirea SMS-ului.
Completarea automată în iOS utilizează Text Content Type pentru potrivirea câmpurilor de intrare cu datele din iCloud Keychain și ASCredentialProviderViewController. Sistemul analizează toate câmpurile de pe ecran, determină tipurile lor semantice și oferă datele salvate corespunzătoare. Fără tipuri specificate corect, completarea automată nu se activează.
Pentru funcționarea completării automate trebuie îndeplinite trei condiții. Prima — câmpul trebuie să aibă un UITextContentType corect. A doua — ecranul trebuie să conțină cel puțin două câmpuri cu tipuri diferite (de exemplu, .username și .password). A treia — aplicația trebuie să suporte Associated Domains cu entitlement webcredentials pentru sincronizarea cu site-ul web.
Lanțul de chei (Keychain) folosește content type pentru clasificarea înregistrărilor salvate. Dacă un câmp este marcat ca .password, sistemul salvează valoarea introdusă în iCloud Keychain și o oferă la următoarea autentificare. Câmpurile cu tipul .creditCardNumber sunt salvate automat în Wallet după confirmarea prin Face ID.
Pentru codurile unice de tip .oneTimeCode, iOS 17 utilizează un nou mecanism AutoFill OTP care nu necesită acces direct la SMS. Sistemul interceptează codurile din mesaje la nivelul sistemului de operare și le transmite aplicației prin rândul QuickType, evitând citirea conținutului mesajelor de către aplicație.
Configurarea de bază a Text Content Type în Swift se face prin proprietatea textContentType în cod sau prin Interface Builder. În cod, atribuirea constantei ocupă o singură linie, iar în IB tipul dorit se selectează din lista derulantă din inspectorul de atribute.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
Pentru crearea programatică a unui formular de autentificare cu completare automată, folosește ambele câmpuri cu content type diferite. Sistemul le va asocia automat ca nume de utilizator și parolă. Dacă aplicația suportă autentificarea biometrică, adaugă un câmp cu tipul .username pentru recunoașterea corectă a contului.
class LoginViewController: UIViewController {
@IBOutlet var usernameField: UITextField!
@IBOutlet var passwordField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
usernameField.textContentType = .username
passwordField.textContentType = .password
passwordField.autocorrectionType = .no
}
}
Pentru câmpul de introducere a codului unic din SMS, specifică tipul .oneTimeCode. Sistemul va sugera automat codul în rândul QuickType după primirea acestuia. Dezvoltatorul nu trebuie să solicite permisiunea de citire a SMS-urilor sau să implementeze propriul parser de mesaje.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
Pentru iOS 17+, tipul .oneTimeCode suportă completarea automată fără focalizare pe câmp. Dacă utilizatorul primește un SMS cu codul, iOS îl oferă pe ecranul de blocare, iar după deblocare codul este inserat automat în câmpul activ cu content type corespunzător.
Alegerea tipului corect influențează direct conversia formularului și experiența utilizatorului. Apple recomandă insistent specificarea celui mai concret tip disponibil. De exemplu, pentru câmpul de nume folosește .givenName, nu .name generic — acest lucru va permite sistemului să sugereze completarea automată din contacte cu numele corect.
Evită greșeala frecventă — setarea .emailAddress pentru câmpul username. Dacă aplicația folosește emailul ca nume de utilizator, specifică tipul .username pentru câmpul de logare și .password pentru câmpul de parolă. Tipul .emailAddress este destinat exclusiv câmpurilor de introducere a emailului ca date de contact, nu ca identificator.
Pentru formularele cu mai multe câmpuri de același tip (de exemplu, două adrese de email), folosește proprietatea .textContentType pentru fiecare câmp, dar adaugă identificatori accessibilityIdentifier diferiți. Acest lucru va ajuta VoiceOver să anunțe corect câmpurile, deși sistemul de completare automată poate sugera aceeași opțiune pentru ambele câmpuri.
Testează completarea automată pe un dispozitiv real cu lanțul de chei populat. Simulatorul nu suportă iCloud Keychain în totalitate, iar comportamentul completării automate poate diferi. Conform Apple Developer Forums (2025), cele mai frecvente probleme cu completarea automată apar tocmai din cauza unui content type specificat incorect.
Întrebări frecvente
UITextContentType determină tipul semantic al datelor, iar UIKeyboardType — aspectul tastaturii. Content type poate suprascrie keyboard type pentru o introducere optimă.
Completarea automată este activată de tipurile .username, .password, .newPassword, .emailAddress, .telephoneNumber și .creditCardNumber. Sistemul potrivește aceste tipuri cu datele din lanțul de chei.
Da, WKWebView suportă Text Content Type pentru câmpurile HTML cu atributul autocomplete. iOS potrivește automat atributele autocomplete cu tipurile UITextContentType.
Da, UITextView moștenește de asemenea UITextInputTraits și suportă proprietatea textContentType. Acest lucru este util pentru câmpurile multilinie de introducere a datelor de contact.
Sistemul poate sugera date incorecte pentru completare automată sau poate nu sugera nimic. De exemplu, un câmp username cu tipul .emailAddress poate completa emailul în locul numelui de utilizator.
Concluzii
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.
Citiți și