Text Content Type es un mecanismo de iOS que indica al sistema qué datos espera un campo de texto. UIKit proporciona constantes UITextContentType para marcar campos de entrada: email, contraseña, teléfono, username y decenas de otros tipos semánticos. Según las Apple Human Interface Guidelines (2025), una configuración correcta del content type aumenta la velocidad de llenado de formularios en un 40% gracias al autocompletado y al teclado adaptativo. Use UITextContentType en cada campo de texto: mejora la experiencia del usuario y reduce los errores de entrada.
Puntos clave
Text Content Type (UITextContentType) es una propiedad de los campos de texto de UIKit que indica a iOS qué datos semánticos espera el campo de entrada. El sistema utiliza esta información para dos propósitos: seleccionar la distribución de teclado adecuada y activar el mecanismo de autocompletado del llavero (iCloud Keychain).
iOS 5 introdujo la primera versión de los tipos semánticos, y en iOS 17 el conjunto de UITextContentType se expandió a 34 constantes, incluyendo nuevos tipos para códigos de un solo uso, códigos postales y nombres de calles. Cada constante representa una cadena que el sistema asigna a reglas de procesamiento internas.
El mecanismo funciona a nivel de UITextInputTraits, un protocolo heredado por UITextField, UITextView y UISearchBar. Esto significa que el content type está disponible en todos los elementos de entrada estándar sin configuración adicional.
Según la sesión 101 de WWDC 2024, Apple recomienda especificar un content type para cada campo de texto en la interfaz, incluso si no se espera autocompletado. El propio marcado ayuda a VoiceOver a anunciar correctamente el propósito del campo para usuarios con discapacidades.
UIKit proporciona una jerarquía de tipos divididos en categorías. Los grupos principales incluyen datos de identificación (nombre, apellido, username), información de contacto (email, teléfono, dirección) y credenciales (contraseña, código de un solo uso). Cada grupo activa diferentes mecanismos de autocompletado.
El grupo de tipos de contacto incluye `.emailAddress`, `.telephoneNumber`, `.fullStreetAddress` y `.city`. Estos tipos activan el autocompletado desde contactos e iCloud Keychain. Un campo con tipo `.emailAddress` sugiere automáticamente direcciones de email introducidas anteriormente, mientras que `.telephoneNumber` sugiere números de teléfono de la agenda.
Para campos de inicio de sesión están destinados .username, .password y .newPassword. El tipo .username activa el gestor de contraseñas de iCloud, que ofrece credenciales guardadas. Un campo con tipo .newPassword inicia la generación de una contraseña segura a través de iCloud Keychain en la primera entrada.
A partir de iOS 17, Apple añadió .oneTimeCode para códigos de confirmación SMS y .shipmentTrackingNumber para seguimiento de paquetes. El tipo .oneTimeCode reconoce automáticamente los códigos de los mensajes y los ofrece en la barra QuickType sin necesidad de abrir la aplicación Mensajes.
| Categoría | Tipos | iOS |
|---|---|---|
| Identificación | .name, .givenName, .familyName, .nickname | 5+ |
| Contactos | .emailAddress, .telephoneNumber, .fullStreetAddress | 5+ |
| Credenciales | .username, .password, .newPassword | 5+ |
| Ubicación | .location, .city, .state, .postalCode | 10+ |
| Datos de tarjeta | .creditCardNumber, .creditCardSecurityCode | 12+ |
| Códigos de un solo uso | .oneTimeCode | 17+ |
Cada tipo se representa mediante una constante de cadena, pero deben compararse usando el operador ==, no mediante rawValue. iOS puede añadir nuevos tipos en versiones futuras, por lo que siempre use una rama default en las sentencias switch-case.
UIKeyboardType y UITextContentType trabajan juntos: el tipo de teclado determina la distribución del teclado, mientras que el content type añade botones adicionales en la barra QuickType. Si se establece un content type, iOS puede sobrescribir el tipo de teclado para una entrada óptima. Por ejemplo, con el tipo `.emailAddress`, el teclado muestra automáticamente el símbolo @ en la capa principal.
Para un campo con tipo .telephoneNumber, iOS cambia el teclado a la distribución telefónica independientemente del tipo de teclado establecido. Este comportamiento no se puede desactivar: el sistema considera que la prioridad del content type es mayor que la configuración explícita del teclado. Los desarrolladores no necesitan configurar ambas propiedades.
Los tipos .URL y .emailAddress añaden botones .com y @ al teclado respectivamente. El tipo .decimalPad con content type .creditCardNumber muestra un teclado numérico con separador decimal, lo que es conveniente para introducir cantidades y números de tarjeta. Según las Apple Human Interface Guidelines, los usuarios esperan que el teclado coincida con el tipo de datos que se introducen, no al revés.
Una excepción es .oneTimeCode: este tipo no cambia la distribución del teclado pero activa la barra QuickType con códigos de SMS. El usuario ve una sugerencia de código sobre el teclado y puede insertarlo con un toque. El mecanismo funciona solo para campos que se convierten en first responder después de recibir un SMS.
El autocompletado en iOS utiliza Text Content Type para asociar campos de entrada con datos de iCloud Keychain y ASCredentialProviderViewController. El sistema analiza todos los campos en la pantalla, determina sus tipos semánticos y ofrece los datos guardados correspondientes. Sin tipos correctamente especificados, el autocompletado no se activa.
Para que el autocompletado funcione, deben cumplirse tres condiciones. Primera, el campo debe tener un UITextContentType correcto. Segunda, la pantalla debe contener al menos dos campos con tipos diferentes (por ejemplo, .username y .password). Tercera, la aplicación debe admitir Associated Domains con el entitlement webcredentials para la sincronización con un sitio web.
El llavero (Keychain) utiliza el content type para clasificar los registros guardados. Si un campo está marcado como .password, el sistema guarda el valor introducido en iCloud Keychain y lo ofrece en el siguiente inicio de sesión. Los campos con tipo .creditCardNumber se guardan automáticamente en Wallet después de la confirmación con Face ID.
Para códigos de un solo uso con tipo .oneTimeCode, iOS 17 utiliza el nuevo mecanismo AutoFill OTP, que no requiere acceso directo a SMS. El sistema intercepta los códigos de los mensajes a nivel del sistema operativo y los pasa a la aplicación a través de la barra QuickType, evitando que la aplicación lea el contenido de los mensajes.
La configuración básica de Text Content Type en Swift se realiza mediante la propiedad textContentType en código o a través de Interface Builder. En código, asignar una constante toma una línea, mientras que en IB el tipo deseado se selecciona de una lista desplegable en el inspector de atributos.
let emailField = UITextField()
emailField.textContentType = .emailAddress
emailField.placeholder = "example@domain.com"
let passwordField = UITextField()
passwordField.isSecureTextEntry = true
passwordField.textContentType = .newPassword
Para la creación programática de un formulario de inicio de sesión con autocompletado, use ambos campos con diferentes content types. El sistema los vincula automáticamente como login y contraseña. Si la aplicación admite inicio de sesión biométrico, añada un campo con tipo .username para el reconocimiento correcto de la cuenta.
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
}
}
Para un campo de entrada de código de un solo uso desde SMS, especifique el tipo .oneTimeCode. El sistema sugerirá automáticamente el código en la barra QuickType después de recibirlo. El desarrollador no necesita solicitar permiso de lectura de SMS ni implementar un análisis de mensajes personalizado.
let otpField = UITextField()
otpField.textContentType = .oneTimeCode
otpField.keyboardType = .numberPad
otpField.placeholder = "Code from SMS"
Para iOS 17+, el tipo .oneTimeCode admite el llenado automático sin enfoque en el campo. Si el usuario recibe un SMS con un código, iOS lo ofrece en la pantalla de bloqueo, y después del desbloqueo, el código se inserta automáticamente en el campo activo con el content type correspondiente.
Elegir el tipo correcto afecta directamente la conversión del formulario y la experiencia del usuario. Apple recomienda encarecidamente especificar el tipo más concreto disponible. Por ejemplo, use .givenName para el campo de nombre en lugar del genérico .name: esto permite que el sistema sugiera autocompletado desde contactos con el nombre correcto.
Evite un error común: establecer .emailAddress para un campo de username. Si la aplicación usa el email como login, especifique .username para el campo de login y .password para el campo de contraseña. El tipo .emailAddress está destinado exclusivamente para la entrada de email como dato de contacto, no como identificador.
Para formularios con varios campos del mismo tipo (por ejemplo, dos direcciones de email), establezca la propiedad .textContentType para cada campo pero añada diferentes valores de accessibilityIdentifier. Esto ayuda a VoiceOver a anunciar correctamente los campos, aunque el sistema de autocompletado puede sugerir el mismo valor para ambos campos.
Pruebe el autocompletado en un dispositivo real con un llavero poblado. El simulador no admite iCloud Keychain en su totalidad, y el comportamiento del autocompletado puede diferir. Según los Apple Developer Forums (2025), los problemas más comunes de autocompletado surgen precisamente de un content type especificado incorrectamente.
Preguntas frecuentes
UITextContentType define el tipo de datos semántico, mientras que UIKeyboardType define la distribución del teclado. El content type puede sobrescribir el keyboard type para una entrada óptima.
El autocompletado se activa con los tipos .username, .password, .newPassword, .emailAddress, .telephoneNumber y .creditCardNumber. El sistema asocia estos tipos con datos del llavero.
Sí, WKWebView admite Text Content Type para campos HTML con el atributo autocomplete. iOS asigna automáticamente los atributos autocomplete a los tipos de UITextContentType.
Sí, UITextView también hereda UITextInputTraits y admite la propiedad textContentType. Esto es útil para campos de entrada multilínea de datos de contacto.
El sistema puede sugerir datos incorrectos para el autocompletado o no sugerir nada. Por ejemplo, un campo de username con tipo .emailAddress podría sugerir un email en lugar de un login.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también