Autocapitalization: какво е, видове и UITextAutocapitalizationType

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

Autocapitalization е механизъм на iOS, който автоматично преобразува първата буква на въведения текст в главна в определени контексти. UIKit предоставя свойството autocapitalizationType в протокола UITextInputTraits с четири режима: none, words, sentences и allCharacters. Според Apple Text Programming Guide (2025), правилната настройка на автоматичното капитализиране подобрява потребителското изживяване и намалява броя на ръчните корекции при въвеждане. Използвайте режим sentences за повечето текстови полета и none за потребителски имена и пароли.

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

  • Autocapitalization — автоматично преобразуване на първата буква в главна в полетата за въвеждане на UIKit
  • UITextAutocapitalizationType включва четири режима: none, words, sentences и allCharacters
  • Режим sentences — най-разпространен, прави първата буква на всяко изречение главна
  • Режим words — прави първата буква на всяка дума главна, удобно за полета за име и фамилия
  • Режим none — задължителен за полета за пароли, имейл, търсене и кодове за потвърждение

Какво е Autocapitalization?

Autocapitalization (автоматично капитализиране) е функция на операционната система iOS, която автоматично преобразува първия знак на текста в главна буква при настъпване на определени условия. Механизмът се управлява чрез свойството autocapitalizationType, достъпно за всички елементи, имплементиращи протокола UITextInputTraits: UITextField, UITextView и UISearchBar.

Функцията работи на ниво текстов двигател на iOS и се активира в момента на въвеждане на всеки знак. Системата анализира позицията на курсора и околния текст, за да определи дали текущият въведен знак трябва да бъде преобразуван в главен. Ако условието е изпълнено, iOS автоматично заменя малката буква с главна, преди да се покаже в полето.

Според Apple Human Interface Guidelines (2025), автоматичното капитализиране е част от по-широка система за предиктивно въвеждане, която включва също автоматична корекция и предиктивно писане на текст. Потребителят може да изключи всички тези функции глобално в настройките на системата (Настройки > Основни > Клавиатура), но разработчикът също ги управлява на ниво конкретни полета.

За разлика от автоматичната корекция, автоматичното капитализиране не използва езиков модел — работи по прости правила: след точка и интервал, в началото на текста, след знак за нов ред. Изключение прави режимът words, където първата буква на всяка дума става главна, независимо от контекста.

Режими на автоматично капитализиране

UITextAutocapitalizationType е изброяване от четири стойности, определящи стратегията за автоматично преобразуване на регистъра. Всеки режим е предназначен за определен тип текстови полета и решава конкретна задача на потребителското изживяване.

None — без автоматично капитализиране

Режим .none напълно изключва автоматичното преобразуване на регистъра. Всички знаци се въвеждат в този регистър, в който потребителят ги пише. Този режим е задължителен за полета за пароли, имейл адреси, псевдоними, търсещи заявки и всички полета, където регистърът има значение за обработката на данни на сървъра.

Words — всяка дума с главна буква

Режим .words прави първата буква на всяка въведена дума главна. Системата определя границата на думата по интервал и преобразува първия знак след интервала в главен. Режимът е удобен за полета за въвеждане на име, фамилия, имена на градове, улици и други полета, където всяка дума трябва да започва с главна буква.

Sentences — начало на изречението

Режим .sentences — най-разпространен и използван по подразбиране за повечето текстови полета. Системата прави главна първата буква след точка, удивителен или въпросителен знак, последван от интервал. Режимът е идеален за полета за въвеждане на бележки, съобщения, коментари и други многоредови текстове.

All Characters — всички главни

Режим .allCharacters преобразува всички въведени знаци в главни. Този режим е еквивалентен на постоянно натискане на Caps Lock и се използва за полета, където данните трябва да бъдат с главни букви: пощенски кодове, кодове на държави, абревиатури, номера на поръчки. Трябва да се прилага с внимание, тъй като текстът с главни букви се чете по-трудно.

РежимОписаниеПример за въвежданеПрепоръка
.noneБез промениjohn@mail.comИмейл, пароли, търсене
.wordsВсяка думаИван ПетровИме, адрес, град
.sentencesНачало на изречениеЗдравей. Как си?Съобщения, бележки
.allCharactersВсички главниABC-123Кодове, индекси

Как работи автоматичната главна буква

Механизмът на автоматично капитализиране се активира на етапа на обработка на натискането на клавиша, преди показване на знака на екрана. Когато потребителят натисне клавиш, UITextInputTraits проверява текущата позиция на курсора и прилага правилото за преобразуване на регистъра в съответствие с зададения autocapitalizationType.

За режим .sentences системата проследява тригерни знаци: точка (.), удивителен знак (!), въпросителен знак (?), както и знак за нов ред ( ), когато режимът е включен. След откриване на тригерния знак и следващия интервал, системата задава флаг „очакване на главна буква" за следващия въведен знак.

Режим .words проследява знака интервал като тригер. След всеки интервал системата очаква главна буква за следващата дума. Има обаче изключения: след тире, апостроф и други препинателни знаци вътре в думата, главна буква не се вмъква. Например „О'Брайън" ще остане коректно.

Важна особеност — автоматичното капитализиране работи само за първия знак на думата. Ако потребителят въведе дума, съдържаща главни букви в средата (например iPhone или macOS), системата не ги променя, тъй като преобразуването се прилага само към първия знак след тригера. Това означава, че имената на марки и продукти с нестандартен регистър няма да бъдат повредени.

Кога да изключите автоматичното капитализиране

Автоматичното капитализиране трябва да се изключва в полета, където регистърът на знаците има значение за коректната обработка на данни. Основните случаи: полета за въвеждане на имейл адреси, потребителски имена, пароли, търсещи заявки, URL адреси, кодове за потвърждение, IMEI и серийни номера. Във всички тези случаи автоматичната промяна на регистъра ще доведе до грешки при обработката на сървъра.

За ленти за търсене (UISearchBar) автоматичното капитализиране е изключено по подразбиране, което съответства на очакванията на потребителите. Заявката за търсене може да бъде въведена във всеки регистър и сървърът обикновено сам я преобразува в малки букви. Ако включите автоматично капитализиране за търсене, потребителят ще трябва ръчно да коригира главната буква в началото на заявката всеки път.

В регистрационни формуляри полето username или nickname трябва да има режим .none, тъй като много системи различават регистъра на знаците в потребителските имена. Полето имейл също трябва да бъде без автоматично капитализиране — въпреки че домейн имената не са чувствителни към регистър, локалната част на имейла теоретично може да различава регистър, макар че на практика това се среща рядко.

Според Apple Developer Documentation, полетата с secureTextEntry (пароли) автоматично наследяват autocapitalizationType = .none, дори ако разработчикът изрично е задал друга стойност. Системата има най-висок приоритет за защитено въвеждане и игнорира всякакви опити за включване на автоматично капитализиране за поле за парола.

Примери за настройка в Swift

Настройката на автоматично капитализиране в Swift се извършва чрез свойството autocapitalizationType. Свойството е достъпно за UITextField, UITextView и UISearchBar. Стойността може да бъде зададена както в код, така и чрез Interface Builder в инспектора на атрибути, където режимът се нарича Capitalization.

swift
let nameField = UITextField()
nameField.autocapitalizationType = .words

let emailField = UITextField()
emailField.autocapitalizationType = .none

За форма за контакти настройте всяко поле според неговата семантика: име — .words, имейл — .none, съобщение — .sentences. Тази комбинация осигурява най-доброто потребителско изживяване и минимизира необходимостта от ръчна корекция на регистъра.

swift
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 в зависимост от текущия режим на работа на формата.

swift
func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField === codeField {
        textField.autocapitalizationType = .allCharacters
    }
}

Локализация и автоматично капитализиране

Автоматичното капитализиране зависи от езика на въвеждане, зададен на клавиатурата на потребителя. За различните езици правилата за преобразуване на регистъра могат да се различават. Например, в турския език буквата „i" в главен регистър става „İ" (с точка), а „I" в малък регистър става „ı" (без точка). iOS взема предвид тези особености автоматично.

За българския език автоматичното капитализиране работи по същите правила като за английския: главна буква след точка, в началото на изречението и след нов ред.

За китайски, японски и корейски език автоматичното капитализиране не се прилага, тъй като тези езици нямат понятие за регистър. Режимът autocapitalizationType се игнорира от системата при използване на съответните клавиатури и полето се държи по същия начин като в режим .none, независимо от зададената стойност.

За арабски език и иврит автоматичното капитализиране също не се прилага, тъй като тези езици използват собствена писмена система без разделение на малки и главни букви. Системата iOS правилно определя езика на въвеждане и игнорира настройките за автоматично капитализиране за езици, където това понятие не съществува.

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

Може ли да се промени режимът на автоматично капитализиране динамично?

Да, свойството autocapitalizationType може да се променя по всяко време, дори когато полето вече е активно. Промяната влиза в сила при следващото въвеждане на знак.

Изключва ли secureTextEntry автоматичното капитализиране?

Да, за полета с isSecureTextEntry = true системата автоматично задава autocapitalizationType = .none. Тази промяна не може да бъде променена програмно.

Работи ли автоматичното капитализиране за UITextView?

Да, UITextView напълно поддържа autocapitalizationType. Това е особено полезно за многоредови полета, където режимът .sentences работи най-естествено.

Как автоматичното капитализиране влияе на паролата?

Ако полето не е маркирано като secureTextEntry, но се използва за въвеждане на парола, автоматичното капитализиране може да промени паролата. Винаги го изключвайте за полета, където регистърът има значение.

Има ли разлика между симулатора и устройството?

На симулатора автоматичното капитализиране работи чрез хардуерната клавиатура на Mac и може да се държи различно. Тествайте на реално устройство за коректно поведение.

Обобщение

  • Autocapitalization — функция за автоматично преобразуване на първия знак в главен в полетата за въвеждане на iOS
  • Четири режима UITextAutocapitalizationType: none, words, sentences, allCharacters
  • Режим .sentences подходящ за повечето полета, активира се след точка, !, ? и нов ред
  • Режим .none задължителен за имейл, пароли, търсене и полета, чувствителни към регистър
  • Режим .words оптимален за полета за име, фамилия, град и адрес
  • Локализация — за турския език важи специалното правило за буквата İ/ı
  • Препоръка — настройвайте автоматичното капитализиране за всяко поле според неговата семантика

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

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

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

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