Text Content Type — är en iOS-mekanism som informerar systemet om vilken data ett textfält förväntar sig. UIKit tillhandahåller konstanter UITextContentType för att markera inmatningsfält: e-post, lösenord, telefon, användarnamn och dussintals andra semantiska typer. Enligt Apple Human Interface Guidelines (2025) ökar korrekt inställning av content type ifyllnadshastigheten av formulär med 40% tack vare autofyll och adaptivt tangentbord. Använd UITextContentType i varje textfält — det förbättrar användarupplevelsen och minskar antalet inmatningsfel.
Huvudpunkter
Text Content Type (UITextContentType) — är en egenskap hos UIKit-textfält som informerar iOS om vilken semantisk data inmatningsfältet förväntar sig. Systemet använder denna information för två ändamål: att välja lämplig tangentbordslayout och aktivera mekanismen för autofyll från nyckelringen (iCloud Keychain).
I iOS 5 introducerades den första versionen av semantiska typer, och i iOS 17 utökades UITextContentType-uppsättningen till 34 konstanter, inklusive nya typer för engångskoder, postnummer och gatunamn. Varje konstant representerar en sträng som systemet matchar mot interna bearbetningsregler.
Mekanismen fungerar på nivån UITextInputTraits — protokollet som ärvs av UITextField, UITextView och UISearchBar. Detta innebär att content type är tillgänglig i alla standard inmatningselement utan ytterligare konfiguration.
Enligt WWDC 2024 Session 101 rekommenderar Apple att ange content type för varje textfält i gränssnittet — även om autofyll inte är avsett. Etiketten i sig hjälper VoiceOver att korrekt meddela fältets syfte för användare med funktionsnedsättningar.
UIKit tillhandahåller en hierarki av typer indelade i kategorier. Huvudgrupperna omfattar identifieringsdata (förnamn, efternamn, användarnamn), kontaktinformation (e-post, telefon, adress) och konton (lösenord, engångskod). Varje grupp aktiverar olika autofyllmekanismer.
Gruppen kontakttyper omfattar `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` och `.city`. Dessa typer aktiverar autofyll från kontakter och iCloud Keychain. Ett fält med typen `.emailAddress` föreslår automatiskt tidigare angivna e-postadresser, och `.telephoneNumber` — telefonnummer från adressboken.
För inloggningsfält är .username, .password och .newPassword avsedda. Typen .username aktiverar iCloud-lösenordshanteraren som erbjuder sparade konton. Ett fält med typen .newPassword initierar generering av ett säkert lösenord via iCloud Keychain vid första inmatningen.
Från och med iOS 17 har Apple lagt till .oneTimeCode för SMS-bekräftelsekoder och .shipmentTrackingNumber för spårning av paket. Typen .oneTimeCode känner automatiskt igen koder från meddelanden och erbjuder dem i QuickType-raden utan att behöva öppna appen Messages.
| Kategori | Typer | iOS |
|---|---|---|
| Identifiering | .name, .givenName, .familyName, .nickname | 5+ |
| Kontakter | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Konton | .username, .password, .newPassword | 5+ |
| Plats | .location, .city, .state, .postalCode | 10+ |
| Kortdata | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Engångskoder | .oneTimeCode | 17+ |
Varje typ representeras av en strängkonstant, men jämförelse bör göras med operatorn ==, inte via rawValue. iOS kan lägga till nya typer i framtida versioner, så i switch-case använd alltid grenen default.
UIKeyboardType och UITextContentType samarbetar: keyboard type bestämmer tangentbordslayouten och content type — ytterligare knappar i QuickType-raden. Om content type har angetts kan iOS åsidosätta keyboard type för optimal inmatning. Till exempel med typen `.emailAddress` visar tangentbordet automatiskt @-symbolen på huvudlagret.
För ett fält med typen .telephoneNumber växlar iOS tangentbordet till telefonlayout oavsett inställd keyboard type. Detta beteende kan inte stängas av — systemet anser att content types prioritet är högre än explicit tangentbordskonfiguration. Utvecklare behöver inte duplicera inställningarna för båda egenskaperna.
Typerna .URL och .emailAddress lägger till knapparna .com och @ på tangentbordet. Typen .decimalPad med content type .creditCardNumber visar ett numeriskt tangentbord med decimalavskiljare, vilket är bekvämt för inmatning av belopp och kortnummer. Enligt Apple Human Interface Guidelines förväntar sig användaren att tangentbordet matchar typen av inmatad data, inte tvärtom.
Undantaget är .oneTimeCode — denna typ ändrar inte tangentbordslayouten, men aktiverar QuickType-raden med koder från SMS. Användaren ser kodförslaget ovanför tangentbordet och kan infoga det med en tryckning. Mekanismen fungerar bara för fält som blir first responder efter att ha mottagit SMS.
Autofyll i iOS använder Text Content Type för att matcha inmatningsfält med data från iCloud Keychain och ASCredentialProviderViewController. Systemet analyserar alla fält på skärmen, bestämmer deras semantiska typer och erbjuder motsvarande sparade data. Utan korrekt angivna typer aktiveras inte autofyll.
För att autofyll ska fungera måste tre villkor uppfyllas. För det första — fältet måste ha korrekt UITextContentType. För det andra — skärmen måste innehålla minst två fält med olika typer (t.ex. .username och .password). För det tredje — appen måste stödja Associated Domains med entitlement webcredentials för synkronisering med webbplatsen.
Nyckelringen (Keychain) använder content type för klassificering av sparade poster. Om ett fält är markerat som .password, sparar systemet det inmatade värdet i iCloud Keychain och erbjuder det vid nästa inloggning. Fält med typen .creditCardNumber sparas automatiskt i Wallet efter bekräftelse via Face ID.
För engångskoder av typen .oneTimeCode använder iOS 17 en ny AutoFill OTP-mekanism som inte kräver direkt åtkomst till SMS. Systemet fångar upp koder från meddelanden på operativsystemsnivå och vidarebefordrar dem till appen via QuickType-raden, vilket undviker att appen läser meddelandeinnehåll.
Grundkonfigurationen av Text Content Type i Swift görs via egenskapen textContentType i kod eller via Interface Builder. I kod tar tilldelningen av en konstant en rad, och i IB väljs önskad typ från rullgardinslistan i attributinspektören.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
För programmatisk skapande av inloggningsformulär med autofyll, använd båda fälten med olika content type. Systemet kopplar automatiskt ihop dem som användarnamn och lösenord. Om appen stöder biometrisk inloggning, lägg till ett fält med typen .username för korrekt identifiering av kontot.
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
}
}
För inmatningsfält för engångskod från SMS, ange typen .oneTimeCode. Systemet föreslår automatiskt koden i QuickType-raden efter mottagning. Utvecklaren behöver inte begära tillstånd att läsa SMS eller implementera egen tolkning av meddelanden.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
För iOS 17+ stöder typen .oneTimeCode autofyll utan fokus på fältet. Om användaren får ett SMS med koden, erbjuder iOS den på låsskärmen, och efter upplåning infogas koden automatiskt i det aktiva fältet med motsvarande content type.
Val av rätt typ påverkar direkt formulärets konvertering och användarupplevelse. Apple rekommenderar starkt att ange den mest specifika tillgängliga typen. Till exempel, för ett namnfält använd .givenName, inte den generiska .name — detta gör det möjligt för systemet att föreslå autofyll från kontakter med rätt namn.
Undvik det vanliga misstaget — att ställa in .emailAddress för ett username-fält. Om appen använder e-post som användarnamn, ange typerna .username för inloggningsfältet och .password för lösenordsfältet. Typen .emailAddress är endast avsedd för fält som anger e-post som kontaktinformation, inte som identifierare.
För formulär med flera fält av samma typ (t.ex. två e-postadresser) använd egenskapen .textContentType för varje fält, men lägg till olika accessibilityIdentifier-identifierare. Detta hjälper VoiceOver att korrekt meddela fälten, även om autofyllsystemet kan föreslå samma alternativ för båda fälten.
Testa autofyll på en verklig enhet med ifylld nyckelring. Simulatorn stöder inte iCloud Keychain fullt ut och autofyllbeteendet kan skilja sig. Enligt Apple Developer Forums (2025) uppstår de vanligaste problemen med autofyll just på grund av felaktigt angiven content type.
Vanliga frågor
UITextContentType bestämmer den semantiska datatypen, medan UIKeyboardType bestämmer tangentbordslayouten. Content type kan åsidosätta keyboard type för optimal inmatning.
Autofyll aktiveras av typerna .username, .password, .newPassword, .emailAddress, .telephoneNumber och .creditCardNumber. Systemet matchar dessa typer med data från nyckelringen.
Ja, WKWebView stöder Text Content Type för HTML-fält med autocomplete-attributet. iOS matchar automatiskt autocomplete-attribut med UITextContentType-typer.
Ja, UITextView ärver också UITextInputTraits och stöder egenskapen textContentType. Detta är användbart för flerradiga inmatningsfält för kontaktinformation.
Systemet kan föreslå felaktig data för autofyll eller inte föreslå någonting. Till exempel kan ett username-fält med typen .emailAddress fylla i e-post istället för användarnamn.
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å