Text Content Type — це механізм iOS, який повідомляє системі, які дані очікує текстове поле. UIKit надає константи UITextContentType для маркування полів введення: email, пароль, телефон, username та десятки інших семантичних типів. За даними 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 надає ієрархію типів, розділених на категорії. Основні групи включають ідентифікаційні дані (ім'я, прізвище, username), контактну інформацію (email, телефон, адреса) та облікові записи (пароль, одноразовий код). Кожна група активує різні механізми автозаповнення.
Група контактних типів включає `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` і `.city`. Ці типи активують автозаповнення з контактів і iCloud Keychain. Поле з типом `.emailAddress` автоматично пропонує раніше введені email-адреси, а `.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. Якщо додаток використовує email як логін, вкажіть типи .username для поля логіна та .password для поля пароля. Тип .emailAddress призначений виключно для полів введення email як контактних даних, а не як ідентифікатора.
Для форм з кількома полями одного типу (наприклад, два email-адреси) використовуйте властивість .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 може підставити email замість логіна.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також