Autocapitalization — är en iOS-mekanism som automatiskt omvandlar första bokstaven i inmatad text till versal i vissa sammanhang. UIKit tillhandahåller egenskapen autocapitalizationType i protokollet UITextInputTraits med fyra lägen: none, words, sentences och allCharacters. Enligt Apple Text Programming Guide (2025) förbättrar korrekt konfiguration av automatisk versalisering användarupplevelsen och minskar antalet manuella korrigeringar vid inmatning. Använd läget sentences för de flesta textfält och none för användarnamn och lösenord.
Huvudpunkter
Autocapitalization (automatisk versalisering) — är en funktion i iOS-operativsystemet som automatiskt omvandlar det första tecknet i texten till versal när vissa villkor uppfylls. Mekanismen styrs via egenskapen autocapitalizationType, tillgänglig för alla element som implementerar protokollet UITextInputTraits: UITextField, UITextView och UISearchBar.
Funktionen arbetar på nivån av iOS-textmotorn och aktiveras i ögonblicket för inmatning av varje tecken. Systemet analyserar markörens position och omgivande text för att avgöra om det aktuella inmatade tecknet ska omvandlas till versal. Om villkoret uppfylls ersätter iOS automatiskt den lilla bokstaven med en versal innan den visas i fältet.
Enligt Apple Human Interface Guidelines (2025) är automatisk versalisering en del av ett bredare system för prediktiv inmatning som även omfattar automatisk korrigering och prediktiv skrivning. Användaren kan inaktivera alla dessa funktioner globalt i systeminställningarna (Inställningar > Allmänt > Tangentbord), men utvecklaren hanterar dem även på nivån av specifika fält.
Till skillnad från automatisk korrigering använder automatisk versalisering inte en språkmodell — den fungerar enligt enkla regler: efter punkt och mellanslag, i början av texten, efter nyradstecken. Undantaget är läget words, där första bokstaven i varje ord blir versal oavsett sammanhang.
UITextAutocapitalizationType — är en uppräkning av fyra värden som definierar strategin för automatisk omvandling av versaler. Varje läge är avsett för en specifik typ av textfält och löser en specifik uppgift för användarupplevelsen.
Läget .none inaktiverar helt automatisk omvandling av versaler. Alla tecken matas in i samma versal-/gemensform som användaren skriver. Detta läge är obligatoriskt för fält med lösenord, e-postadresser, smeknamn, sökfrågor och alla fält där versaler/gemener har betydelse för databehandling på servern.
Läget .words gör första bokstaven i varje inmatat ord till versal. Systemet bestämmer ordgränsen efter mellanslag och omvandlar första tecknet efter mellanslag till versal. Läget är bekvämt för inmatningsfält för namn, efternamn, stadsnamn, gator och andra fält där varje ord ska börja med versal.
Läget .sentences — vanligast och används som standard för de flesta textfält. Systemet gör första bokstaven efter punkt, utropstecken eller frågetecken följt av mellanslag till versal. Läget är idealiskt för fält för anteckningar, meddelanden, kommentarer och andra flerradiga texter.
Läget .allCharacters omvandlar alla inmatade tecken till versaler. Detta läge är likvärdigt med att ständigt hålla ned Caps Lock och används för fält där data måste vara i versaler: postnummer, landskoder, förkortningar, ordernummer. Bör användas med försiktighet eftersom text i versaler är svårare att läsa.
| Läge | Beskrivning | Inmatningsexempel | Rekommendation |
|---|---|---|---|
| .none | Inga förändringar | john@mail.com | E-post, lösenord, sökning |
| .words | Varje ord | Anna Andersson | Namn, adress, stad |
| .sentences | Meningsbörjan | Hej. Hur mår du? | Meddelanden, anteckningar |
| .allCharacters | Alla versaler | ABC-123 | Koder, index |
Mekanismen för automatisk versalisering aktiveras i steget för bearbetning av tangenttryckning, innan tecknet visas på skärmen. När användaren trycker på en tangent kontrollerar UITextInputTraits markörens aktuella position och tillämpar regeln för omvandling av versaler enligt inställd autocapitalizationType.
För läget .sentences övervakar systemet utlösande tecken: punkt (.), utropstecken (!), frågetecken (?) samt nyradstecknet ( ) när läget är aktiverat. Efter detektion av ett utlösande tecken och följande mellanslag sätter systemet en flagga “väntar på versal” för nästa inmatade tecken.
Läget .words övervakar mellanslagstecknet som utlösare. Efter varje mellanslag förväntar systemet en versal för nästa ord. Det finns dock undantag: efter bindestreck, apostrof och andra skiljetecken inuti ett ord sätts ingen versal. Till exempel förblir “O’Brien” korrekt.
En viktig egenskap — automatisk versalisering fungerar endast för första tecknet i ett ord. Om användaren matar in ett ord som innehåller versaler i mitten (till exempel iPhone eller macOS) ändrar systemet dem inte, eftersom omvandlingen endast tillämpas på första tecknet efter utlösaren. Detta innebär att varumärkes- och produktnamn med icke-standardiserad versalisering inte skadas.
Automatisk versalisering bör inaktiveras i fält där versaler/gemener har betydelse för korrekt databehandling. Huvudfall: fält för e-postadresser, smeknamn och användarnamn, lösenord, sökfrågor, URL-adresser, bekräftelsekoder, IMEI och serienummer. I alla dessa fall kommer automatisk ändring av versaler/gemener att leda till fel vid bearbetning på servern.
För sökfält (UISearchBar) är automatisk versalisering inaktiverad som standard, vilket motsvarar användarnas förväntningar. En sökfråga kan matas in i valfritt versal-/gemensläge och servern konverterar den vanligtvis själv till gemener. Om du aktiverar automatisk versalisering för sökning måste användaren varje gång manuellt korrigera versalen i början av frågan.
I registreringsformulär bör fältet username eller nickname ha läget .none, eftersom många system skiljer på versaler och gemener i användarnamn. E-postfältet bör också vara utan automatisk versalisering — även om domännamn inte är skiftlägeskänsliga kan den lokala delen av e-post teoretiskt skilja på versaler och gemener, även om detta sällan förekommer i praktiken.
Enligt Apple Developer Documentation ärver fält med secureTextEntry (lösenord) automatiskt autocapitalizationType = .none, även om utvecklaren uttryckligen har angett ett annat värde. Systemet har högsta prioritet för skyddad inmatning och ignorerar alla försök att aktivera automatisk versalisering för ett lösenordsfält.
Konfiguration av automatisk versalisering i Swift görs via egenskapen autocapitalizationType. Egenskapen är tillgänglig för UITextField, UITextView och UISearchBar. Värdet kan ställas in både i kod och via Interface Builder i attributinspektören, där läget kallas Capitalization.
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
För ett kontaktformulär konfigurerar du varje fält enligt dess semantik: namn — .words, e-post — .none, meddelande — .sentences. En sådan kombination ger bästa användarupplevelse och minimerar behovet av manuell korrigering av versaler.
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
}
}
För programmatisk ändring av läget under körning använder du delegaten UITextFieldDelegate. Om ett fält till exempel kan användas i olika sammanhang ändrar du autocapitalizationType i metoden textFieldDidBeginEditing beroende på formulärets aktuella arbetsläge.
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
Automatisk versalisering beror på inmatningsspråket som är inställt på användarens tangentbord. För olika språk kan reglerna för omvandling av versaler skilja sig åt. I turkiska blir bokstaven “i” i versal “İ” (med prick) och “I” i gemen blir “ı” (utan prick). iOS tar automatiskt hänsyn till dessa egenskaper.
För ryska fungerar automatisk versalisering enligt samma regler som för engelska: versal efter punkt, i början av mening och efter ny rad. Problem kan uppstå med bokstaven “jo” — även om den finns i systemordboken visar inte alla tangentbordslayouter den på huvudlagret och automatisk versalisering omvandlar den korrekt till versal.
För kinesiska, japanska och koreanska tillämpas inte automatisk versalisering eftersom dessa språk inte har begreppet versaler och gemener. Läget autocapitalizationType ignoreras av systemet vid användning av motsvarande tangentbord och fältet beter sig som i läget .none oavsett inställt värde.
För arabiska och hebreiska tillämpas inte heller automatisk versalisering eftersom dessa språk använder sitt eget skriftsystem utan uppdelning i gemener och versaler. iOS-systemet bestämmer korrekt inmatningsspråk och ignorerar inställningar för automatisk versalisering för språk där detta begrepp inte finns.
Vanliga frågor
Ja, egenskapen autocapitalizationType kan ändras när som helst, även när fältet redan är aktivt. Ändringen träder i kraft vid nästa teckeninmatning.
Ja, för fält med isSecureTextEntry = true ställer systemet automatiskt in autocapitalizationType = .none. Detta beteende kan inte ändras programmatiskt.
Ja, UITextView stöder fullt ut autocapitalizationType. Detta är särskilt användbart för flerradiga fält där läget .sentences fungerar mest naturligt.
Om ett fält inte är markerat som secureTextEntry men används för lösenordsinmatning kan automatisk versalisering ändra lösenordet. Inaktivera det alltid i fält där versaler/gemener har betydelse.
På simulatorn fungerar automatisk versalisering via Macens fysiska tangentbord och kan bete sig annorlunda. Testa på en verklig enhet för korrekt beteende.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också