Автокапіталізація — це механізм iOS, який автоматично перетворює першу літеру введеного тексту на велику у певних контекстах. UIKit надає властивість autocapitalizationType у протоколі UITextInputTraits із чотирма режимами: none, words, sentences та allCharacters. Згідно з Apple Text Programming Guide (2025), правильне налаштування автокапіталізації покращує користувацький досвід і зменшує кількість ручних виправлень під час введення. Використовуйте режим sentences для більшості текстових полів та none для імен користувачів і паролів.
Головне
Автокапіталізація — це функція операційної системи iOS, яка автоматично перетворює перший символ тексту на велику літеру при настанні певних умов. Механізм керується через властивість autocapitalizationType, доступну для всіх елементів, що реалізують протокол UITextInputTraits: UITextField, UITextView та UISearchBar.
Функція працює на рівні текстового рушія iOS та активується в момент введення кожного символу. Система аналізує позицію курсора та навколишній текст, щоб визначити, чи потрібно перетворити поточний символ на великий. Якщо умова спрацьовує, iOS автоматично замінює малу літеру на велику до того, як вона відобразиться в полі.
Згідно з Apple Human Interface Guidelines (2025), автокапіталізація є частиною ширшої системи предиктивного введення, яка також включає автокорекцію та предиктивний набір тексту. Користувач може вимкнути всі ці функції глобально в налаштуваннях системи (Налаштування > Основні > Клавіатура), але розробник також керує ними на рівні конкретних полів.
На відміну від автокорекції, автокапіталізація не використовує мовну модель — вона працює за простими правилами: після крапки та пробілу, на початку тексту, після символу нового рядка. Виняток становить режим words, де великою стає перша літера кожного слова, незалежно від контексту.
UITextAutocapitalizationType — це перелік із чотирьох значень, що визначають стратегію автоматичного перетворення регістру. Кожен режим призначений для певного типу текстових полів і вирішує конкретне завдання користувацького досвіду.
Режим .none повністю вимикає автоматичне перетворення регістру. Всі символи вводяться в тому регістрі, в якому користувач їх набирає. Цей режим обов'язковий для полів паролів, email-адрес, нікнеймів, пошукових запитів та будь-яких полів, де регістр має значення для обробки даних на сервері.
Режим .words робить великою першу літеру кожного введеного слова. Система визначає межу слова за пробілом і перетворює перший символ після пробілу на великий. Режим зручний для полів введення імені, прізвища, назв міст, вулиць та інших полів, де кожне слово має починатися з великої літери.
Режим .sentences — найпоширеніший і використовується за замовчуванням для більшості текстових полів. Система робить великою першу літеру після крапки, знаку оклику або знаку питання, за яким слідує пробіл. Режим ідеально підходить для полів введення нотаток, повідомлень, коментарів та інших багаторядкових текстів.
Режим .allCharacters перетворює всі символи, що вводяться, на великі. Цей режим еквівалентний постійному натисканню Caps Lock і використовується для полів, де дані мають бути у верхньому регістрі: поштові індекси, коди країн, абревіатури, номери замовлень. Слід застосовувати з обережністю, оскільки текст у верхньому регістрі гірше читається.
| Режим | Опис | Приклад введення | Рекомендація |
|---|---|---|---|
| .none | Без змін | ivan@mail.com | Email, паролі, пошук |
| .words | Кожне слово | Іван Петров | Ім'я, адреса, місто |
| .sentences | Початок речення | Привіт. Як справи? | Повідомлення, нотатки |
| .allCharacters | Всі великі | ABC-123 | Коди, індекси |
Механізм автокапіталізації активується на етапі обробки натискання клавіші, до відображення символу на екрані. Коли користувач натискає клавішу, UITextInputTraits перевіряє поточну позицію курсора та застосовує правило перетворення регістру відповідно до встановленого autocapitalizationType.
Для режиму .sentences система відстежує тригерні символи: крапка (.), знак оклику (!), знак питання (?), а також символ нового рядка ( ) при ввімкненому режимі. Після виявлення тригерного символу та наступного за ним пробілу система встановлює прапорець «очікування великої літери» для наступного символу, що вводиться.
Режим .words відстежує символ пробілу як тригер. Після кожного пробілу система очікує велику літеру для наступного слова. Однак є винятки: після дефісу, апострофа та інших розділових знаків всередині слова велика літера не вставляється. Наприклад, «O’Brien» залишиться коректним.
Важлива особливість — автокапіталізація працює лише для першого символу слова. Якщо користувач вводить слово, що містить великі літери в середині (наприклад, iPhone або macOS), система не змінює їх, оскільки перетворення застосовується лише до першого символу після тригера. Це означає, що назви брендів і продуктів з нестандартним регістром не будуть пошкоджені.
Автокапіталізацію слід вимикати в полях, де регістр символів має значення для коректної обробки даних. Основні випадки: поля введення email-адрес, нікнеймів та імен користувачів, паролів, пошукових запитів, URL-адрес, кодів підтвердження, IMEI та серійних номерів. У всіх цих випадках автоматична зміна регістру призведе до помилок при обробці на сервері.
Для пошукових рядків (UISearchBar) автокапіталізація за замовчуванням вимкнена, що відповідає очікуванням користувачів. Пошуковий запит може бути введений у будь-якому регістрі, і сервер зазвичай приводить його до нижнього регістру самостійно. Якщо ввімкнути автокапіталізацію для пошуку, користувач щоразу вручну виправлятиме велику літеру на початку запиту.
У формах реєстрації поле username або nickname повинно мати режим .none, оскільки багато систем розрізняють регістр символів в іменах користувачів. Поле email також має бути без автокапіталізації — хоча доменні імена не чутливі до регістру, локальна частина email теоретично може розрізняти регістр, хоча на практиці це трапляється рідко.
Згідно з Apple Developer Documentation, поля з secureTextEntry (паролі) автоматично успадковують autocapitalizationType = .none, навіть якщо розробник явно встановив інше значення. Система має найвищий пріоритет для захищеного введення та ігнорує будь-які спроби ввімкнути автокапіталізацію для поля пароля.
Налаштування автокапіталізації в Swift виконується через властивість autocapitalizationType. Властивість доступна для UITextField, UITextView та UISearchBar. Значення можна встановити як у коді, так і через Interface Builder в інспекторі атрибутів, де режим називається Capitalization.
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
Для форми контактів налаштуйте кожне поле відповідно до його семантики: ім'я — .words, email — .none, повідомлення — .sentences. Така комбінація забезпечує найкращий користувацький досвід і мінімізує необхідність ручного виправлення регістру.
class ContactFormViewController: UIViewController {
@IBOutlet var nameField: UITextField!
@IBOutlet var emailField: UITextField!
@IBOutlet var messageView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
nameField.autocapitalizationType = .words
emailField.autocapitalizationType = .none
messageView.autocapitalizationType = .sentences
}
}
Для програмної зміни режиму в рантаймі використовуйте делегат UITextFieldDelegate. Наприклад, якщо поле може використовуватися в різних контекстах, змінюйте autocapitalizationType в методі textFieldDidBeginEditing залежно від поточного режиму роботи форми.
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
Автокапіталізація залежить від мови введення, встановленої на клавіатурі користувача. Для різних мов правила перетворення регістру можуть відрізнятися. Наприклад, у турецькій мові літера «i» у верхньому регістрі перетворюється на «İ» (з крапкою), а «I» у нижньому регістрі — на «ı» (без крапки). iOS враховує ці особливості автоматично.
Для української мови автокапіталізація працює за тими самими правилами, що й для англійської: велика літера після крапки, на початку речення та після нового рядка. Проблеми можуть виникнути з літерою «yo» — хоча вона присутня в системному словнику, не всі клавіатурні розкладки відображають її на основному шарі, і автокапіталізація коректно перетворює «yo» на «Yo».
Для китайської, японської та корейської мов автокапіталізація не застосовується, оскільки в цих мовах немає поняття регістру. Режим autocapitalizationType ігнорується системою при використанні відповідних клавіатур, і поле поводиться так само, як при режимі .none, незалежно від встановленого значення.
Для арабської мови та івриту автокапіталізація також не застосовується, оскільки ці мови використовують власну систему письма без розділення на малі та великі літери. Система iOS коректно визначає мову введення та ігнорує налаштування автокапіталізації для мов, де це поняття відсутнє.
Часті запитання
Так, властивість autocapitalizationType можна змінювати в будь-який момент, навіть коли поле вже активне. Зміна набуде чинності при наступному введенні символу.
Так, для полів із isSecureTextEntry = true система автоматично встановлює autocapitalizationType = .none. Змінити цю поведінку програмно неможливо.
Так, UITextView повністю підтримує autocapitalizationType. Це особливо корисно для багаторядкових полів, де режим .sentences працює найбільш природно.
Якщо поле не позначене як secureTextEntry, але використовується для введення пароля, автокапіталізація може змінити пароль. Завжди вимикайте її для полів, де регістр має значення.
На симуляторі автокапіталізація працює через апаратну клавіатуру Mac і може поводитися інакше. Тестуйте на реальному пристрої для коректної поведінки.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.