Autocapitalization je mechanismus iOS, který automaticky převádí první písmeno zadaného textu na velké v určitých kontextech. UIKit poskytuje vlastnost autocapitalizationType v protokolu UITextInputTraits se čtyřmi režimy: none, words, sentences a allCharacters. Podle Apple Text Programming Guide (2025) správné nastavení automatické kapitalizace zlepšuje uživatelský zážitek a snižuje počet ručních oprav při zadávání. Použijte režim sentences pro většinu textových polí a none pro uživatelská jména a hesla.
Hlavní body
Autocapitalization (automatická kapitalizace) je funkce operačního systému iOS, která automaticky převádí první znak textu na velké písmeno při splnění určitých podmínek. Mechanismus je řízen pomocí vlastnosti autocapitalizationType, dostupné pro všechny prvky implementující protokol UITextInputTraits: UITextField, UITextView a UISearchBar.
Funkce pracuje na úrovni textového enginu iOS a aktivuje se v okamžiku zadávání každého znaku. Systém analyzuje pozici kurzoru a okolní text, aby určil, zda má aktuálně zadávaný znak převést na velký. Pokud je podmínka splněna, iOS automaticky nahradí malé písmeno velkým dříve, než se zobrazí v poli.
Podle Apple Human Interface Guidelines (2025) je automatická kapitalizace součástí širšího systému prediktivního zadávání, který zahrnuje také automatickou opravu a prediktivní psaní textu. Uživatel může všechny tyto funkce globálně vypnout v nastavení systému (Nastavení > Obecné > Klávesnice), ale vývojář je také spravuje na úrovni konkrétních polí.
Na rozdíl od automatické opravy nepoužívá automatická kapitalizace jazykový model — funguje podle jednoduchých pravidel: po tečce a mezeře, na začátku textu, po znaku nového řádku. Výjimkou je režim words, kde se první písmeno každého slova stává velkým bez ohledu na kontext.
UITextAutocapitalizationType je výčet čtyř hodnot definujících strategii automatického převodu velikosti písmen. Každý režim je určen pro konkrétní typ textových polí a řeší specifický úkol uživatelského zážitku.
Režim .none zcela vypíná automatický převod velikosti písmen. Všechny znaky jsou zadávány v té velikosti, v jaké je uživatel píše. Tento režim je povinný pro pole hesel, e-mailových adres, přezdívek, vyhledávacích dotazů a všech polí, kde na velikosti písmen záleží při zpracování dat na serveru.
Režim .words dělá první písmeno každého zadaného slova velkým. Systém určuje hranici slova podle mezery a převádí první znak po mezeře na velký. Režim je vhodný pro pole pro zadání jména, příjmení, názvů měst, ulic a dalších polí, kde každé slovo má začínat velkým písmenem.
Režim .sentences — nejběžnější a standardně používaný pro většinu textových polí. Systém dělá velkým první písmeno po tečce, vykřičníku nebo otazníku, za kterým následuje mezera. Režim je ideální pro pole pro zadávání poznámek, zpráv, komentářů a dalších víceřádkových textů.
Režim .allCharacters převádí všechny zadané znaky na velké. Tento režim je ekvivalentem neustálého držení Caps Lock a používá se pro pole, kde data mají být velkými písmeny: poštovní směrovací čísla, kódy zemí, zkratky, čísla objednávek. Měl by být používán s opatrností, protože text psaný velkými písmeny je hůře čitelný.
| Režim | Popis | Příklad vstupu | Doporučení |
|---|---|---|---|
| .none | Bez změn | john@mail.com | E-mail, hesla, hledání |
| .words | Každé slovo | Jan Novák | Jméno, adresa, město |
| .sentences | Začátek věty | Ahoj. Jak se máš? | Zprávy, poznámky |
| .allCharacters | Vše velké | ABC-123 | Kódy, indexy |
Mechanismus automatické kapitalizace se aktivuje ve fázi zpracování stisku klávesy, před zobrazením znaku na obrazovce. Když uživatel stiskne klávesu, UITextInputTraits zkontroluje aktuální pozici kurzoru a použije pravidlo převodu velikosti písmen podle nastaveného autocapitalizationType.
Pro režim .sentences systém sleduje spouštěcí znaky: tečku (.), vykřičník (!), otazník (?) a znak nového řádku ( ) pokud je režim zapnutý. Po detekci spouštěcího znaku a následující mezery systém nastaví příznak „očekávání velkého písmena" pro další zadávaný znak.
Režim .words sleduje znak mezery jako spouštěč. Po každé mezeře systém očekává velké písmeno pro další slovo. Existují však výjimky: po pomlčce, apostrofu a dalších interpunkčních znaméncích uvnitř slova se velké písmeno nevkládá. Například „O'Brien" zůstane správně.
Důležitá vlastnost — automatická kapitalizace funguje pouze pro první znak slova. Pokud uživatel zadá slovo obsahující velká písmena uprostřed (například iPhone nebo macOS), systém je nemění, protože převod se aplikuje pouze na první znak po spouštěči. To znamená, že názvy značek a produktů s nestandardní velikostí písmen nebudou poškozeny.
Automatickou kapitalizaci je třeba vypnout v polích, kde na velikosti písmen záleží pro správné zpracování dat. Hlavní případy: pole pro zadávání e-mailových adres, uživatelských jmen, hesel, vyhledávacích dotazů, URL adres, potvrzovacích kódů, IMEI a sériových čísel. Ve všech těchto případech povede automatická změna velikosti písmen k chybám při zpracování na serveru.
Pro vyhledávací lišty (UISearchBar) je automatická kapitalizace standardně vypnuta, což odpovídá očekávání uživatelů. Vyhledávací dotaz může být zadán v jakékoli velikosti písmen a server jej obvykle sám převede na malá písmena. Pokud zapnete automatickou kapitalizaci pro vyhledávání, uživatel bude muset pokaždé ručně opravovat velké písmeno na začátku dotazu.
V registračních formulářích by pole username nebo nickname mělo mít režim .none, protože mnoho systémů rozlišuje velikost písmen u uživatelských jmen. Pole e-mail by také mělo být bez automatické kapitalizace — i když doménová jména nerozlišují velikost písmen, lokální část e-mailu teoreticky může, i když se to v praxi vyskytuje zřídka.
Podle Apple Developer Documentation pole s secureTextEntry (hesla) automaticky dědí autocapitalizationType = .none, i když vývojář explicitně nastaví jinou hodnotu. Systém má nejvyšší prioritu pro zabezpečený vstup a ignoruje všechny pokusy o zapnutí automatické kapitalizace pro pole hesla.
Nastavení automatické kapitalizace ve Swift se provádí pomocí vlastnosti autocapitalizationType. Vlastnost je dostupná pro UITextField, UITextView a UISearchBar. Hodnotu lze nastavit jak v kódu, tak přes Interface Builder v inspektoru atributů, kde se režim nazývá Capitalization.
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
Pro kontaktní formulář nastavte každé pole podle jeho sémantiky: jméno — .words, e-mail — .none, zpráva — .sentences. Tato kombinace zajišťuje nejlepší uživatelský zážitek a minimalizuje potřebu ruční opravy velikosti písmen.
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
}
}
Pro programovou změnu režimu za běhu použijte delegáta UITextFieldDelegate. Pokud například pole může být použito v různých kontextech, změňte autocapitalizationType v metodě textFieldDidBeginEditing v závislosti na aktuálním režimu formuláře.
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
Automatická kapitalizace závisí na jazyku zadání nastaveném na klávesnici uživatele. Pro různé jazyky se pravidla převodu velikosti písmen mohou lišit. Například v turečtině se písmeno „i" ve velkém stává „İ" (s tečkou) a „I" v malém se stává „ı" (bez tečky). iOS tyto zvláštnosti zohledňuje automaticky.
Pro češtinu funguje automatická kapitalizace podle stejných pravidel jako pro angličtinu: velké písmeno po tečce, na začátku věty a po novém řádku.
Pro čínštinu, japonštinu a korejštinu se automatická kapitalizace nepoužívá, protože tyto jazyky nemají koncept velikosti písmen. Režim autocapitalizationType je systémem ignorován při použití odpovídajících klávesnic a pole se chová stejně jako v režimu .none bez ohledu na nastavenou hodnotu.
Pro arabštinu a hebrejštinu se automatická kapitalizace také nepoužívá, protože tyto jazyky používají vlastní systém psaní bez rozdělení na malá a velká písmena. Systém iOS správně určuje jazyk zadání a ignoruje nastavení automatické kapitalizace pro jazyky, kde tento koncept neexistuje.
Často kladené otázky
Ano, vlastnost autocapitalizationType lze změnit kdykoli, i když je pole již aktivní. Změna se projeví při příštím zadání znaku.
Ano, pro pole s isSecureTextEntry = true systém automaticky nastaví autocapitalizationType = .none. Toto chování nelze programově změnit.
Ano, UITextView plně podporuje autocapitalizationType. To je užitečné zejména pro víceřádková pole, kde režim .sentences funguje nejpřirozeněji.
Pokud pole není označeno jako secureTextEntry, ale používá se pro zadávání hesla, automatická kapitalizace může změnit heslo. Vždy ji vypněte pro pole, kde na velikosti písmen záleží.
Na simulátoru automatická kapitalizace funguje přes hardwarovou klávesnici Macu a může se chovat jinak. Testujte na reálném zařízení pro správné chování.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také