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

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

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

Главное

  • Text Content Type — семантическая метка для UITextField и UITextView, указывающая тип ожидаемых данных
  • UITextContentType содержит более 30 предопределённых типов: email, телефон, пароль, адрес, имя, фамилия и другие
  • Автозаполнение работает только при правильно указанном content type — система сопоставляет поле с данными из связки ключей
  • Клавиатура адаптируется под тип: для email отображается @, для телефон — цифровая раскладка
  • Безопасность — для паролей и одноразовых кодов используйте соответствующие типы, чтобы включить интеграцию с 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 предоставляет иерархию типов, разделённых на категории. Основные группы включает идентификационные данные (имя, фамилия, username), контактную информацию (email, телефон, адрес) и учётные записи (пароль, одноразовый код). Каждая группа активирует разные механизмы автозаполнения.

Контактные данные

Группа контактных типов включает `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` и `.city`. Эти типы активируют автозаполнение из контактов и iCloud Keychain. Поле с типом `.emailAddress` автоматически предлагает введённые ранее email-адреса, а `.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. Если приложение использует email как логин, укажите типы .username для поля логина и .password для поля пароля. Тип .emailAddress предназначен исключительно для полей ввода email как контактных данных, а не как идентификатора.

Для форм с несколькими полями одного типа (например, два email-адреса) используйте свойство .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 может подставить email вместо логина.

Итоги

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

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

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также