Text Content Type: какво е, семантични типове и UIKit

Автор: IT Sectr Публикувано: 2026-07-07 Време за четене: 8 мин

Text Content Type — е механизъм на iOS, който информира системата какви данни очаква текстово поле. UIKit предоставя константи UITextContentType за маркиране на полета за въвеждане: имейл, парола, телефон, потребителско име и десетки други семантични типове. Според Apple Human Interface Guidelines (2025) правилното настроика на content type повишава скоростта на попълване на формуляри с 40% благодарение на автоматичното попълване и адаптивната клавиатура. Използвайте UITextContentType във всяко текстово поле — това подобрява потребителското изживяване и намалява броя на грешките при въвеждане.

Основни точки

  • Text Content Type — семантичен етикет за UITextField и UITextView, указващ типа на очакваните данни
  • UITextContentType съдържа повече от 30 предварително дефинирани типа: имейл, телефон, парола, адрес, име, фамилия и други
  • Автоматично попълване работи само при правилно посочен content type — системата свързва полето с данни от ключодържателя
  • Клавиатура се адаптира към типа: за имейл показва @, за телефон — цифрова подредба
  • Сигурност — за пароли и еднократни кодове използвайте съответните типове, за да включите интеграция с iCloud Keychain

Какво е Text Content Type?

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 да обявява правилно предназначението на полето за потребители с увреждания.

Налични типове UITextContentType

UIKit предоставя йерархия от типове, разделени в категории. Основните групи включват идентификационни данни (име, фамилия, потребителско име), информация за контакт (имейл, телефон, адрес) и акаунти (парола, еднократен код). Всяка група активира различни механизми за автоматично попълване.

Данни за контакт

Групата контактни типове включва `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` и `.city`. Тези типове активират автоматично попълване от контакти и iCloud Keychain. Поле с тип `.emailAddress` автоматично предлага предварително въведени имейл адреси, а `.telephoneNumber` — телефонни номера от адресната книга.

Акаунти

За полета за вход са предназначени .username, .password и .newPassword. Типът .username активира мениджъра на пароли iCloud, който предлага запазени акаунти. Поле с тип .newPassword инициира генериране на сигурна парола чрез iCloud Keychain при първото въвеждане.

Специализирани типове iOS 17+

От iOS 17 нататък Apple добави .oneTimeCode за SMS кодове за потвърждение и .shipmentTrackingNumber за проследяване на пратки. Типът .oneTimeCode автоматично разпознава кодове от съобщения и ги предлага в лентата QuickType без необходимост от отваряне на приложението Messages.

КатегорияТиповеiOS
Идентификация.name, .givenName, .familyName, .nickname5+
Контакти.emailAddress, .telephoneNumber, .fullStreetAddress5+
Акаунти.username, .password, .newPassword5+
Местоположение.location, .city, .state, .postalCode10+
Данни на карти.creditCardNumber, .creditCardSecurityCode12+
Еднократни кодове.oneTimeCode17+

Всеки тип е представен от низова константа, но сравнението трябва да се прави чрез оператор ==, а не чрез 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, избягвайки четене на съдържанието на съобщенията от приложението.

Примери за използване в Swift

Основната конфигурация на Text Content Type в Swift се извършва чрез свойството textContentType в код или чрез Interface Builder. В кода присвояването на константа заема един ред, а в IB желаният тип се избира от падащ списък в инспектора на атрибути.

swift
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"

let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword

За програмно създаване на формуляр за вход с автоматично попълване използвайте и двете полета с различни content type. Системата автоматично ще ги свърже като потребителско име и парола. Ако приложението поддържа биометричен вход, добавете поле с тип .username за правилно разпознаване на акаунта.

swift
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 или да имплементира собствено анализиране на съобщения.

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

Често задавани въпроси

Каква е разликата между textContentType и keyboardType?

UITextContentType определя семантичния тип данни, докато UIKeyboardType определя подредбата на клавиатурата. Content type може да отмени keyboard type за оптимално въвеждане.

Кои типове активират автоматично попълване от iCloud Keychain?

Автоматичното попълване се активира от типовете .username, .password, .newPassword, .emailAddress, .telephoneNumber и .creditCardNumber. Системата свързва тези типове с данни от ключодържателя.

Работи ли Text Content Type в WKWebView?

Да, WKWebView поддържа Text Content Type за HTML полета с атрибут autocomplete. iOS автоматично свързва autocomplete атрибутите с типове UITextContentType.

Трябва ли да се посочи content type за UITextView?

Да, UITextView също наследява UITextInputTraits и поддържа свойството textContentType. Това е полезно за многоредови полета за въвеждане на контактни данни.

Какво се случва при неправилно посочен тип?

Системата може да предложи неправилни данни за автоматично попълване или да не предложи нищо. Например поле username с тип .emailAddress може да вмъкне имейл вместо потребителско име.

Обобщение

  • Text Content Type — семантично маркиране на полета за въвеждане в iOS, определящо типа на очакваните данни
  • UITextContentType включва над 30 константи за различни категории: контакти, акаунти, местоположение, платежни данни
  • Клавиатура автоматично се адаптира към content type, показвайки подходящи символи и подредба
  • Автоматично попълване от iCloud Keychain се активира само при правилно посочени типове на полета
  • OTP механизъм в iOS 17+ позволява автоматично вмъкване на кодове от SMS без достъп до съобщения
  • VoiceOver използва content type за правилно обявяване на предназначението на полето
  • Препоръка — посочвайте най-конкретния тип за всяко поле и тествайте автоматичното попълване на реално устройство

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също