First Responder: qué es, propósito y objeto de entrada

Autor: IT Sectr Publicado: 2026-07-09 Tiempo de lectura: 9 min

First Responder es el objeto UIResponder en iOS que recibe primero los eventos de toque, pulsaciones de teclas, gestos de agitación y comandos de menú. En cualquier momento, solo un objeto en la aplicación puede ser first responder. La asignación ocurre automáticamente (cuando un UITextField obtiene el foco) o mediante programación a través del método becomeFirstResponder. Según la Documentación para Desarrolladores de Apple (2026), un objeto puede convertirse en first responder solo si su método canBecomeFirstResponder devuelve true, lo que hace que este mecanismo sea explícito y controlable.

Puntos clave

  • First Responder es el receptor principal de eventos de entrada, asignado automáticamente o mediante becomeFirstResponder.
  • Solo un objeto en la aplicación puede ser first responder en un momento dado.
  • canBecomeFirstResponder debe devolver true para que un objeto pueda convertirse en first responder.
  • ResignFirstResponder elimina el estado de first responder y oculta el teclado para UITextField.
  • UITextField y UITextView se convierten en first responder cuando reciben el foco del usuario.

Qué es First Responder

First Responder es el objeto UIResponder que actualmente recibe eventos de entrada en una aplicación iOS. El sistema dirige todos los eventos de toque, pulsaciones de teclas, eventos de movimiento (agitación del dispositivo) y mensajes de acción (por ejemplo, invocar un menú contextual) a este objeto.

El concepto de first responder es el primer eslabón en la Cadena de Respondedores (Responder Chain). Si el first responder no maneja un evento recibido, se pasa automáticamente al siguiente objeto en la cadena. Esto garantiza que un evento no se pierda, sino que se ofrezca secuencialmente a todos los manejadores potenciales en la jerarquía.

Según Apple, el estado de first responder está estrechamente vinculado a UIResponder y sus métodos canBecomeFirstResponder y becomeFirstResponder. Por defecto, UIView devuelve true solo para ciertas subclases: UITextField, UITextView, UISearchBar. Otras vistas, incluido un UIView simple, devuelven false, lo que evita la asignación accidental.

Cómo se asigna First Responder

La asignación de first responder puede ocurrir de dos maneras: automáticamente, cuando el usuario toca un UITextField (el sistema llama a becomeFirstResponder internamente), o mediante programación, cuando el desarrollador llama explícitamente al método becomeFirstResponder en cualquier objeto UIResponder.

Antes de la asignación, iOS verifica canBecomeFirstResponder. Si el método devuelve false, la llamada a becomeFirstResponder se ignora y el objeto no se convierte en first responder. Este es un mecanismo de protección que evita asignar objetos que no están listos para manejar eventos, como elementos de interfaz ocultos o deshabilitados.

swift
class CustomTextField: UITextField {
    override var canBecomeFirstResponder: Bool {
        return super.canBecomeFirstResponder
    }
}

// Asignación programática
textField.becomeFirstResponder()

// Verificar si es first responder
if textField.isFirstResponder {
    print("TextField ahora es first responder")
}

Cuando se asigna un nuevo first responder, iOS llama automáticamente a resignFirstResponder en el anterior. Esto garantiza que siempre haya solo un objeto con estado de first responder en el sistema. Si el nuevo objeto no puede convertirse en first responder (canBecomeFirstResponder = false), el anterior conserva su estado.

First Responder y el teclado

El teclado de iOS aparece en pantalla precisamente gracias al mecanismo de first responder. Cuando un UITextField o UITextView se convierte en first responder, el sistema muestra automáticamente el teclado asociado con el keyboardType actual de ese campo. Cuando el first responder renuncia, el teclado se oculta.

Este comportamiento es un mecanismo UX clave en iOS: el usuario toca un campo de entrada — aparece el teclado; presiona Retorno o toca otro campo — el teclado cambia o se oculta. El desarrollador puede controlar esto a través de los métodos de UIResponder, así como mediante inputView e inputAccessoryView para reemplazar el teclado estándar por uno personalizado.

Input Accessory View es un panel adicional sobre el teclado que también está vinculado al first responder. Por ejemplo, un panel con botones Siguiente, Anterior, Hecho para navegar entre campos de entrada. Aparece y se oculta junto con el teclado, sincronizándose con el estado de first responder.

EventoEstado de first responderTeclado
Tocar UITextFieldSe convierte en first responderAparece
Presionar RetornoPermanece o renunciaPermanece o se oculta
Tocar otro campoPasa al nuevo campoCambia
Llamar a resignFirstResponderSe eliminaSe oculta
App en segundo planoRenuncia automáticamenteSe oculta

Resign First Responder

ResignFirstResponder es un método de UIResponder que elimina el estado de first responder de un objeto. Después de la llamada, el objeto deja de recibir eventos de entrada y el teclado (si estaba activo) se oculta. El método devuelve un Bool — true si la renuncia fue exitosa.

Los desarrolladores suelen llamar a resignFirstResponder en respuesta a presionar el botón Hecho, tocar un área vacía de la pantalla (view.endEditing) o al salir de la pantalla. view.endEditing(true) es una forma conveniente de renunciar para todos los campos de texto hijos a la vez: recorre toda la jerarquía de vistas y llama a resignFirstResponder en el first responder actual.

swift
// Renunciar al tocar el botón Hecho
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Renunciar al tocar área vacía
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Renunciar para todos los campos del formulario
func validateAndSubmit() {
    view.endEditing(true)
    // Lógica de envío del formulario
}

Existen situaciones en las que resignFirstResponder puede devolver false. Esto ocurre si el objeto ha sobrescrito el método y ha prohibido explícitamente la eliminación del estado. Por ejemplo, un campo de texto en proceso de validación puede bloquear temporalmente la renuncia para evitar la pérdida de datos. En tales casos, debes esperar a que la validación termine y solo entonces renunciar forzosamente.

Comprobación y monitoreo de First Responder

UIResponder proporciona la propiedad isFirstResponder (solo lectura), que devuelve true si el objeto dado es actualmente el first responder. Esto es útil para lógica condicional, por ejemplo, para evitar realizar una acción si un campo de texto está enfocado y el usuario está ingresando datos.

iOS no proporciona una API integrada para obtener el first responder actual a nivel de toda la aplicación. Los desarrolladores logran esto recorriendo la jerarquía de vistas mediante el método de UIResponder. Apple recomienda una referencia débil al first responder, que se puede actualizar mediante KVO o delegados.

swift
// Extensión para encontrar first responder
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

// Uso
if let current = view.firstResponder {
    print("Current first responder: \(current)")
}

Para rastrear cambios en el first responder, puedes suscribirte a UIResponder.keyboardWillShowNotification y UIResponder.keyboardWillHideNotification — indican indirectamente que algún objeto de texto se ha convertido o ha dejado de ser el first responder. Sin embargo, no existe una suscripción directa para cambios en isFirstResponder; se utilizan KVO o delegados personalizados.

First Responder y vistas personalizadas

Las vistas personalizadas pueden convertirse en first responder si sobrescriben canBecomeFirstResponder y devuelven true. Esto es necesario para componentes que deben recibir eventos del teclado o botones físicos, como controladores de juego personalizados o editores de código basados en UITextView.

Al crear un first responder personalizado, es importante tener en cuenta la accesibilidad: VoiceOver y Switch Control dependen de la asignación correcta del first responder para la navegación. Si una vista personalizada se convierte en first responder, debe implementar correctamente el protocolo UIAccessibility e informar su estado a las tecnologías de asistencia.

Para entrada personalizada (por ejemplo, un escáner de códigos de barras o un teclado numérico), sobrescribe la propiedad inputView — devuelve una UIView personalizada que se mostrará en lugar del teclado estándar cuando esta vista sea first responder. Del mismo modo, inputAccessoryView agrega un panel sobre el teclado.

Preguntas frecuentes

¿Qué es First Responder en iOS?

First Responder es el objeto UIResponder que actualmente recibe eventos de entrada (toque, teclas, acelerómetro). Se asigna mediante becomeFirstResponder y debe devolver true de canBecomeFirstResponder. Solo un objeto puede ser first responder en una aplicación.

¿Cómo hacer que UITextField sea first responder sin tocarlo?

Llama a textField.becomeFirstResponder() mediante programación, por ejemplo, en viewDidAppear. Asegúrate de que textField no esté oculto, userInteractionEnabled = true e isEnabled = true. Si el campo está dentro de un UITableView o UICollectionView, asegúrate de que la celda sea visible en pantalla.

¿Cómo ocultar el teclado al tocar fuera del campo de texto?

Agrega un UITapGestureRecognizer a la vista principal y llama a view.endEditing(true) en su manejador. Esto encontrará automáticamente el first responder actual y llamará a resignFirstResponder. Alternativamente, sobrescribe touchesBegan en UIViewController con una llamada a endEditing.

¿Por qué becomeFirstResponder devuelve false?

becomeFirstResponder devuelve false si canBecomeFirstResponder devuelve false, la vista está oculta, no está en la jerarquía de la ventana o userInteractionEnabled = false. También verifica que la vista esté agregada a la ventana — una vista que no esté en pantalla no responderá a becomeFirstResponder.

¿Cómo determinar qué objeto es actualmente first responder?

iOS no proporciona una API global para esto. Usa un recorrido recursivo de la jerarquía de vistas mediante una extensión de UIView que verifique isFirstResponder en cada subvista. Una alternativa es almacenar una referencia débil al último first responder en AppDelegate y actualizarla mediante delegados de UITextField.

Resumen

  • First Responder es el único objeto UIResponder que recibe eventos de entrada en iOS. Es el primer eslabón en la Cadena de Respondedores.
  • becomeFirstResponder asigna el objeto como first responder, pero solo si canBecomeFirstResponder devuelve true — este es un mecanismo de protección explícito del sistema.
  • resignFirstResponder elimina el estado de first responder; para campos de texto, esto oculta automáticamente el teclado.
  • UITextField y UITextView se convierten en first responder al recibir el foco y pueden cambiarse mediante programación a través de becomeFirstResponder en otro campo.
  • view.endEditing(true) es una forma conveniente de renunciar para todos los objetos respondedores hijos en la jerarquía de vistas.
  • Las vistas personalizadas pueden convertirse en first responder sobrescribiendo canBecomeFirstResponder para escenarios de entrada específicos.
  • El seguimiento del first responder se implementa mediante recorrido recursivo de subvistas o indirectamente a través de notificaciones del teclado.

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.

Discutir el proyecto

Lea también