Text Content Type — је механизам iOS-а који обавештава систем које податке очекује текстуално поље. UIKit пружа константе UITextContentType за означавање поља за унос: имејл, лозинка, телефон, корисничко име и десетине других семантичких типова. Према Apple Human Interface Guidelines (2025), правилно подешавање content type-а повећава брзину попуњавања формулара за 40% захваљујући аутоматском попуњавању и адаптивној тастатури. Користите UITextContentType у сваком текстуалном пољу — то побољшава корисничко искуство и смањује број грешака при уносу.
Главне тачке
Text Content Type (UITextContentType) — је својство текстуалних поља UIKit-а које обавештава iOS које семантичке податке очекује поље за унос. Систем користи ове информације у две сврхе: одабир одговарајућег распореда тастатуре и активирање механизма аутоматског попуњавања из ланца кључева (iCloud Keychain).
У iOS 5 је уведена прва верзија семантичких типова, а у iOS 17 скуп UITextContentType се проширио на 34 константе, укључујући нове типове за једнократне кодове, поштанске бројеве и називе улица. Свака константа представља низ који систем повезује са унутрашњим правилима обраде.
Механизам ради на нивоу UITextInputTraits — протокола који наслеђују UITextField, UITextView и UISearchBar. То значи да је content type доступан у свим стандардним елементима за унос без додатне конфигурације.
Према WWDC 2024 Session 101, Apple препоручује навођење content type-а за свако текстуално поље у интерфејсу — чак и ако аутоматско попуњавање није предвиђено. Сама ознака помаже VoiceOver-у да правилно изговори намену поља за кориснике са инвалидитетом.
UIKit пружа хијерархију типова подељених у категорије. Главне групе укључују идентификационе податке (име, презиме, корисничко име), контакт информације (имејл, телефон, адреса) и налоге (лозинка, једнократни код). Свака група активира различите механизме аутоматског попуњавања.
Група контакт типова укључује `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` и `.city`. Ови типови активирају аутоматско попуњавање из контаката и iCloud Keychain-а. Поље са типом `.emailAddress` аутоматски предлаже претходно унете имејл адресе, а `.telephoneNumber` — телефонске бројеве из адресара.
За поља за пријаву намењени су .username, .password и .newPassword. Тип .username активира менаџер лозинки iCloud-а који нуди сачуване налоге. Поље са типом .newPassword покреће генерисање безбедне лозинке путем iCloud Keychain-а при првом уносу.
Почев од iOS 17, Apple је додао .oneTimeCode за SMS кодове потврде и .shipmentTrackingNumber за праћење пошиљки. Тип .oneTimeCode аутоматски препознаје кодове из порука и нуди их у реду QuickType без потребе за отварањем апликације Messages.
| Категорија | Типови | iOS |
|---|---|---|
| Идентификација | .name, .givenName, .familyName, .nickname | 5+ |
| Контакти | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Налози | .username, .password, .newPassword | 5+ |
| Локација | .location, .city, .state, .postalCode | 10+ |
| Подаци картица | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Једнократни кодови | .oneTimeCode | 17+ |
Сваки тип је представљен низовном константом, али их треба поредити путем оператора ==, а не путем rawValue. iOS може додати нове типове у будућим верзијама, зато у switch-case увек користите грану default.
UIKeyboardType и UITextContentType раде заједно: keyboard type одређује распоред тастатуре, а content type — додатна дугмад у реду QuickType. Ако је content type наведен, iOS може премостити keyboard type за оптималан унос. На пример, код типа `.emailAddress` тастатура аутоматски приказује симбол @ на главном слоју.
За поље са типом .telephoneNumber iOS пребацује тастатуру на телефонски распоред без обзира на подешени keyboard type. Ово понашање се не може искључити — систем сматра приоритет content type-а вишим од експлицитног подешавања тастатуре. Програмери не морају да дуплирају подешавања оба својства.
Типови .URL и .emailAddress додају на тастатуру дугмад .com и @ респективно. Тип .decimalPad са content type .creditCardNumber приказује нумеричку тастатуру са децималним сепаратором, што је згодно за унос износа и бројева картица. Према Apple Human Interface Guidelines, корисник очекује да тастатура одговара типу података који се уносе, а не обрнуто.
Изузетак је .oneTimeCode — овај тип не мења распоред тастатуре, али активира ред QuickType са кодовима из SMS-а. Корисник види предлог кода изнад тастатуре и може га уметнути једним додиром. Механизам ради само за поља која постају first responder након пријема SMS-а.
Аутоматско попуњавање у iOS-у користи Text Content Type за повезивање поља за унос са подацима из iCloud Keychain-а и ASCredentialProviderViewController-а. Систем анализира сва поља на екрану, одређује њихове семантичке типове и нуди одговарајуће сачуване податке. Без правилно наведених типова аутоматско попуњавање се не активира.
За рад аутоматског попуњавања потребна су три услова. Први — поље мора имати исправан UITextContentType. Други — екран мора садржати најмање два поља са различитим типовима (нпр. .username и .password). Трећи — апликација мора подржавати Associated Domains са entitlement webcredentials за синхронизацију са веб-сајтом.
Ланац кључева (Keychain) користи content type за класификацију сачуваних записа. Ако је поље означено као .password, систем чува унету вредност у iCloud Keychain-у и нуди је при следећој пријави. Поља са типом .creditCardNumber се аутоматски чувају у Wallet-у након потврде путем Face ID-а.
За једнократне кодове типа .oneTimeCode, iOS 17 користи нови механизам AutoFill OTP који не захтева директан приступ SMS-у. Систем пресреће кодове из порука на нивоу оперативног система и прослеђује их апликацији путем реда QuickType, избегавајући читање садржаја порука од стране апликације.
Основно подешавање Text Content Type-а у Swift-у се врши путем својства textContentType у коду или кроз Interface Builder. У коду, додела константе заузима један ред, а у IB жељени тип се бира из падајуће листе у инспектору атрибута.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
За програмско креирање формулара за пријаву са аутоматским попуњавањем користите оба поља са различитим content type-овима. Систем ће их аутоматски повезати као корисничко име и лозинку. Ако апликација подржава биометријску пријаву, додајте поље са типом .username за правилно препознавање налога.
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
}
}
За поље за унос једнократног кода из SMS-а наведите тип .oneTimeCode. Систем ће аутоматски предложити код у реду QuickType након његовог пријема. Програмер не мора да тражи дозволу за читање SMS-а или да имплементира сопствено парсирање порука.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
За iOS 17+, тип .oneTimeCode подржава аутоматско попуњавање без фокуса на пољу. Ако корисник прими SMS са кодом, iOS га нуди на екрану закључавања, а након откључавања код се аутоматски убацује у активно поље са одговарајућим content type-ом.
Избор исправног типа директно утиче на конверзију формулара и корисничко искуство. Apple снажно препоручује навођење најконкретнијег доступног типа. На пример, за поље имена користите .givenName, а не општи .name — то ће омогућити систему да предложи аутоматско попуњавање из контаката са тачним именом.
Избегавајте честу грешку — постављање .emailAddress за поље username. Ако апликација користи имејл као корисничко име, наведите типове .username за поље за пријаву и .password за поље лозинке. Тип .emailAddress је намењен искључиво за поља за унос имејла као контакт података, а не као идентификатора.
За формуларе са више поља истог типа (на пример, две имејл адресе) користите својство .textContentType за свако поље, али додајте различите идентификаторе accessibilityIdentifier. Ово ће помоћи VoiceOver-у да правилно изговори поља, иако систем аутоматског попуњавања може предложити исту опцију за оба поља.
Тестирајте аутоматско попуњавање на стварном уређају са попуњеним ланцем кључева. Симулатор не подржава iCloud Keychain у потпуности, а понашање аутоматског попуњавања може се разликовати. Према Apple Developer Forums (2025), најчешћи проблеми са аутоматским попуњавањем настају управо због нетачно наведеног content type-а.
Често постављана питања
UITextContentType одређује семантички тип података, а UIKeyboardType — распоред тастатуре. Content type може премостити keyboard type за оптималан унос.
Аутоматско попуњавање активирају типови .username, .password, .newPassword, .emailAddress, .telephoneNumber и .creditCardNumber. Систем повезује ове типове са подацима из ланца кључева.
Да, WKWebView подржава Text Content Type за HTML поља са атрибутом autocomplete. iOS аутоматски повезује autocomplete атрибуте са типовима UITextContentType.
Да, UITextView такође наслеђује UITextInputTraits и подржава својство textContentType. Ово је корисно за вишередна поља за унос контакт података.
Систем може предложити нетачне податке за аутоматско попуњавање или не предложити ништа. На пример, поље username са типом .emailAddress може убацити имејл уместо корисничког имена.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође