Text Content Type est un mécanisme iOS qui indique au système quelles données un champ de texte attend. UIKit fournit des constantes UITextContentType pour marquer les champs de saisie : e-mail, mot de passe, téléphone, nom d'utilisateur et des dizaines d'autres types sémantiques. Selon les Apple Human Interface Guidelines (2025), une configuration correcte du content type augmente la vitesse de remplissage des formulaires de 40 % grâce au remplissage automatique et au clavier adaptatif. Utilisez UITextContentType dans chaque champ de texte, cela améliore l'expérience utilisateur et réduit les erreurs de saisie.
Points clés
Text Content Type (UITextContentType) est une propriété des champs de texte UIKit qui indique à iOS quelles données sémantiques le champ de saisie attend. Le système utilise ces informations à deux fins : sélectionner la disposition de clavier appropriée et activer le mécanisme de remplissage automatique du trousseau (iCloud Keychain).
iOS 5 a introduit la première version des types sémantiques, et dans iOS 17, l'ensemble UITextContentType s'est étendu à 34 constantes, incluant de nouveaux types pour les codes à usage unique, les codes postaux et les noms de rues. Chaque constante représente une chaîne que le système associe à des règles de traitement internes.
Le mécanisme fonctionne au niveau UITextInputTraits, un protocole hérité par UITextField, UITextView et UISearchBar. Cela signifie que le content type est disponible dans tous les éléments de saisie standard sans configuration supplémentaire.
Selon la session 101 de la WWDC 2024, Apple recommande de spécifier un content type pour chaque champ de texte dans l'interface, même si le remplissage automatique n'est pas attendu. Le balisage lui-même aide VoiceOver à annoncer correctement le but du champ pour les utilisateurs handicapés.
UIKit fournit une hiérarchie de types divisés en catégories. Les groupes principaux incluent les données d'identification (nom, nom de famille, nom d'utilisateur), les informations de contact (e-mail, téléphone, adresse) et les identifiants (mot de passe, code à usage unique). Chaque groupe active différents mécanismes de remplissage automatique.
Le groupe des types de contact inclut `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` et `.city`. Ces types activent le remplissage automatique à partir des contacts et d'iCloud Keychain. Un champ de type `.emailAddress` suggère automatiquement les adresses e-mail déjà saisies, tandis que `.telephoneNumber` suggère les numéros de téléphone du carnet d'adresses.
Pour les champs de connexion, .username, .password et .newPassword sont prévus. Le type .username active le gestionnaire de mots de passe iCloud, qui propose les identifiants enregistrés. Un champ de type .newPassword initie la génération d'un mot de passe fort via iCloud Keychain lors de la première saisie.
À partir d'iOS 17, Apple a ajouté .oneTimeCode pour les codes de confirmation SMS et .shipmentTrackingNumber pour le suivi des colis. Le type .oneTimeCode reconnaît automatiquement les codes des messages et les propose dans la barre QuickType sans avoir besoin d'ouvrir l'application Messages.
| Catégorie | Types | iOS |
|---|---|---|
| Identification | .name, .givenName, .familyName, .nickname | 5+ |
| Contacts | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Identifiants | .username, .password, .newPassword | 5+ |
| Localisation | .location, .city, .state, .postalCode | 10+ |
| Données de carte | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Codes à usage unique | .oneTimeCode | 17+ |
Chaque type est représenté par une constante de chaîne, mais ils doivent être comparés à l'aide de l'opérateur ==, pas via rawValue. iOS peut ajouter de nouveaux types dans les versions futures, donc utilisez toujours une branche default dans les instructions switch-case.
UIKeyboardType et UITextContentType fonctionnent ensemble : le type de clavier détermine la disposition du clavier, tandis que le content type ajoute des boutons supplémentaires dans la barre QuickType. Si un content type est défini, iOS peut remplacer le type de clavier pour une saisie optimale. Par exemple, avec le type `.emailAddress`, le clavier affiche automatiquement le symbole @ sur la couche principale.
Pour un champ de type .telephoneNumber, iOS bascule le clavier vers la disposition téléphonique indépendamment du type de clavier défini. Ce comportement ne peut pas être désactivé - le système considère la priorité du content type comme supérieure à la configuration explicite du clavier. Les développeurs n'ont pas besoin de configurer les deux propriétés.
Les types .URL et .emailAddress ajoutent respectivement les boutons .com et @ au clavier. Le type .decimalPad avec le content type .creditCardNumber affiche un clavier numérique avec séparateur décimal, ce qui est pratique pour saisir des montants et des numéros de carte. Selon les Apple Human Interface Guidelines, les utilisateurs s'attendent à ce que le clavier corresponde au type de données saisies, et non l'inverse.
Une exception est .oneTimeCode - ce type ne change pas la disposition du clavier mais active la barre QuickType avec les codes des SMS. L'utilisateur voit une suggestion de code au-dessus du clavier et peut l'insérer d'une simple pression. Le mécanisme fonctionne uniquement pour les champs qui deviennent first responder après la réception d'un SMS.
Le remplissage automatique dans iOS utilise Text Content Type pour associer les champs de saisie aux données d'iCloud Keychain et d'ASCredentialProviderViewController. Le système analyse tous les champs à l'écran, détermine leurs types sémantiques et propose les données enregistrées correspondantes. Sans types correctement spécifiés, le remplissage automatique n'est pas activé.
Pour que le remplissage automatique fonctionne, trois conditions doivent être remplies. Premièrement, le champ doit avoir un UITextContentType correct. Deuxièmement, l'écran doit contenir au moins deux champs de types différents (par exemple, .username et .password). Troisièmement, l'application doit prendre en charge Associated Domains avec l'entitlement webcredentials pour la synchronisation avec un site web.
Le trousseau (Keychain) utilise le content type pour classer les enregistrements sauvegardés. Si un champ est marqué comme .password, le système enregistre la valeur saisie dans iCloud Keychain et la propose lors de la prochaine connexion. Les champs de type .creditCardNumber sont automatiquement sauvegardés dans Wallet après confirmation par Face ID.
Pour les codes à usage unique de type .oneTimeCode, iOS 17 utilise le nouveau mécanisme AutoFill OTP, qui ne nécessite pas d'accès direct aux SMS. Le système intercepte les codes des messages au niveau du système d'exploitation et les transmet à l'application via la barre QuickType, contournant ainsi la lecture du contenu des messages par l'application.
La configuration de base de Text Content Type en Swift s'effectue via la propriété textContentType dans le code ou via Interface Builder. Dans le code, l'affectation d'une constante prend une ligne, tandis que dans IB, le type souhaité est sélectionné dans une liste déroulante dans l'inspecteur d'attributs.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
Pour la création programmatique d'un formulaire de connexion avec remplissage automatique, utilisez les deux champs avec des content types différents. Le système les lie automatiquement comme identifiant et mot de passe. Si l'application prend en charge la connexion biométrique, ajoutez un champ de type .username pour la reconnaissance correcte du compte.
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
}
}
Pour un champ de saisie de code à usage unique depuis SMS, spécifiez le type .oneTimeCode. Le système suggérera automatiquement le code dans la barre QuickType après l'avoir reçu. Le développeur n'a pas besoin de demander l'autorisation de lecture des SMS ni d'implémenter une analyse de messages personnalisée.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
Pour iOS 17+, le type .oneTimeCode prend en charge le remplissage automatique sans focus sur le champ. Si l'utilisateur reçoit un SMS avec un code, iOS le propose sur l'écran de verrouillage, et après déverrouillage, le code est automatiquement inséré dans le champ actif avec le content type correspondant.
Choisir le bon type affecte directement la conversion du formulaire et l'expérience utilisateur. Apple recommande vivement de spécifier le type le plus spécifique disponible. Par exemple, utilisez .givenName pour le champ du prénom plutôt que le générique .name - cela permet au système de suggérer le remplissage automatique à partir des contacts avec le bon nom.
Évitez une erreur courante : définir .emailAddress pour un champ de nom d'utilisateur. Si l'application utilise l'e-mail comme identifiant, spécifiez .username pour le champ de connexion et .password pour le champ de mot de passe. Le type .emailAddress est destiné exclusivement à la saisie d'e-mail comme donnée de contact, pas comme identifiant.
Pour les formulaires avec plusieurs champs du même type (par exemple, deux adresses e-mail), définissez la propriété .textContentType pour chaque champ mais ajoutez des valeurs d'accessibilityIdentifier différentes. Cela aide VoiceOver à annoncer correctement les champs, bien que le système de remplissage automatique puisse suggérer la même valeur pour les deux champs.
Testez le remplissage automatique sur un appareil réel avec un trousseau rempli. Le simulateur ne prend pas en charge iCloud Keychain complètement, et le comportement du remplissage automatique peut différer. Selon les Apple Developer Forums (2025), les problèmes les plus courants de remplissage automatique proviennent précisément d'un content type mal spécifié.
Foire aux questions
UITextContentType définit le type de données sémantique, tandis que UIKeyboardType définit la disposition du clavier. Le content type peut remplacer le keyboard type pour une saisie optimale.
Le remplissage automatique est activé par les types .username, .password, .newPassword, .emailAddress, .telephoneNumber et .creditCardNumber. Le système associe ces types aux données du trousseau.
Oui, WKWebView prend en charge Text Content Type pour les champs HTML avec l'attribut autocomplete. iOS associe automatiquement les attributs autocomplete aux types UITextContentType.
Oui, UITextView hérite également de UITextInputTraits et prend en charge la propriété textContentType. C'est utile pour les champs de saisie multiligne de données de contact.
Le système peut suggérer des données incorrectes pour le remplissage automatique ou ne rien suggérer du tout. Par exemple, un champ de nom d'utilisateur avec le type .emailAddress pourrait suggérer un e-mail au lieu d'un identifiant.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi