First Responder: o que é, finalidade e objeto de entrada

Autor: IT Sectr Publicado: 2026-07-09 Tempo de leitura: 9 min

First Responder é o objeto UIResponder no iOS que recebe primeiro os eventos de toque, pressionamentos de tecla, gestos de agitação e comandos de menu. Em qualquer momento, apenas um objeto no aplicativo pode ser first responder. A atribuição ocorre automaticamente (quando um UITextField ganha foco) ou programaticamente através do método becomeFirstResponder. De acordo com a Documentação para Desenvolvedores Apple (2026), um objeto pode se tornar first responder apenas se seu método canBecomeFirstResponder retornar true, tornando esse mecanismo explícito e controlável.

Principais pontos

  • First Responder é o principal receptor de eventos de entrada, atribuído automaticamente ou através de becomeFirstResponder.
  • Apenas um objeto no aplicativo pode ser first responder em um determinado momento.
  • canBecomeFirstResponder deve retornar true para que um objeto possa se tornar first responder.
  • ResignFirstResponder remove o status de first responder e oculta o teclado para UITextField.
  • UITextField e UITextView se tornam first responder quando recebem o foco do usuário.

O que é First Responder

First Responder é o objeto UIResponder que atualmente recebe eventos de entrada em um aplicativo iOS. O sistema direciona todos os eventos de toque, pressionamentos de tecla, eventos de movimento (agitação do dispositivo) e mensagens de ação (por exemplo, invocar um menu de contexto) para este objeto.

O conceito de first responder é o primeiro elo na Cadeia de Respondedores (Responder Chain). Se o first responder não tratar um evento recebido, ele é automaticamente passado para o próximo objeto na cadeia. Isso garante que um evento não seja perdido, mas seja oferecido sequencialmente a todos os manipuladores potenciais na hierarquia.

Segundo a Apple, o status de first responder está intimamente ligado ao UIResponder e seus métodos canBecomeFirstResponder e becomeFirstResponder. Por padrão, UIView retorna true apenas para certas subclasses — UITextField, UITextView, UISearchBar. Outras visualizações, incluindo UIView simples, retornam false, evitando atribuição acidental.

Como First Responder é atribuído

A atribuição de first responder pode ocorrer de duas maneiras: automaticamente, quando o usuário toca em um UITextField (o sistema chama becomeFirstResponder internamente), ou programaticamente, quando o desenvolvedor chama explicitamente o método becomeFirstResponder em qualquer objeto UIResponder.

Antes da atribuição, o iOS verifica canBecomeFirstResponder. Se o método retornar false, a chamada becomeFirstResponder é ignorada e o objeto não se torna first responder. Este é um mecanismo de proteção que impede a atribuição de objetos que não estão prontos para manipular eventos — por exemplo, elementos de interface ocultos ou desabilitados.

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

// Atribuição programática
textField.becomeFirstResponder()

// Verificar se é first responder
if textField.isFirstResponder {
    print("TextField agora é first responder")
}

Quando um novo first responder é atribuído, o iOS chama automaticamente resignFirstResponder no anterior. Isso garante que haja sempre apenas um objeto com status de first responder no sistema. Se o novo objeto não puder se tornar first responder (canBecomeFirstResponder = false), o antigo mantém seu status.

First Responder e o teclado

O teclado do iOS aparece na tela precisamente por causa do mecanismo de first responder. Quando um UITextField ou UITextView se torna first responder, o sistema exibe automaticamente o teclado associado ao keyboardType atual desse campo. Quando o first responder renuncia, o teclado é ocultado.

Este comportamento é um mecanismo UX fundamental no iOS: o usuário toca em um campo de entrada — o teclado aparece; pressiona Return ou toca em outro campo — o teclado alterna ou é ocultado. O desenvolvedor pode controlar isso através dos métodos UIResponder, bem como através de inputView e inputAccessoryView para substituir o teclado padrão por um personalizado.

Input Accessory View é um painel adicional acima do teclado que também está vinculado ao first responder. Por exemplo, um painel com botões Next, Previous, Done para navegar entre campos de entrada. Ele aparece e é ocultado junto com o teclado, sincronizando com o status de first responder.

EventoStatus de first responderTeclado
Tocar em UITextFieldTorna-se first responderAparece
Pressionar ReturnPermanece ou renunciaPermanece ou é ocultado
Tocar em outro campoPassa para o novo campoAlterna
Chamar resignFirstResponderRemovidoÉ ocultado
Aplicativo em segundo planoRenuncia automaticamenteÉ ocultado

Resign First Responder

ResignFirstResponder é um método UIResponder que remove o status de first responder de um objeto. Após a chamada, o objeto para de receber eventos de entrada e o teclado (se estava ativo) é ocultado. O método retorna um Bool — true se a renúncia foi bem-sucedida.

Os desenvolvedores costumam chamar resignFirstResponder em resposta ao pressionar o botão Done, tocar em uma área vazia da tela (view.endEditing) ou ao sair da tela. view.endEditing(true) é uma maneira conveniente de renunciar para todos os campos de texto filhos de uma vez: ele percorre toda a hierarquia de visualização e chama resignFirstResponder no first responder atual.

swift
// Renunciar ao tocar no botão Done
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

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

// Renunciar para todos os campos do formulário
func validateAndSubmit() {
    view.endEditing(true)
    // Lógica de envio do formulário
}

Existem situações em que resignFirstResponder pode retornar false. Isso acontece se o objeto sobrescreveu o método e proibiu explicitamente a remoção do status. Por exemplo, um campo de texto em processo de validação pode bloquear temporariamente a renúncia para evitar perda de dados. Nesses casos, aguarde a conclusão da validação e só então renuncie à força.

Verificação e monitoramento de First Responder

UIResponder fornece a propriedade isFirstResponder (somente leitura), que retorna true se o objeto fornecido for atualmente o first responder. Isso é útil para lógica condicional — por exemplo, para evitar executar uma ação se um campo de texto estiver focado e o usuário estiver inserindo dados.

O iOS não fornece uma API integrada para obter o first responder atual em escala de aplicativo inteiro. Os desenvolvedores conseguem isso percorrendo a hierarquia de visualizações usando o método UIResponder. A Apple recomenda uma referência fraca (weak reference) ao first responder, que pode ser atualizada via KVO ou delegados.

swift
// Extensão 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 alterações no first responder, você pode se inscrever em UIResponder.keyboardWillShowNotification e UIResponder.keyboardWillHideNotification — eles indicam indiretamente que algum objeto de texto se tornou ou deixou de ser o first responder. No entanto, não existe inscrição direta para alterações de isFirstResponder; KVO ou delegados personalizados são usados.

First Responder e visualizações personalizadas

Visualizações personalizadas podem se tornar first responder se sobrescreverem canBecomeFirstResponder e retornarem true. Isso é necessário para componentes que precisam receber eventos de teclado ou botões físicos — como controladores de jogo personalizados ou editores de código baseados em UITextView.

Ao criar um first responder personalizado, é importante considerar a acessibilidade: VoiceOver e Switch Control dependem da atribuição correta do first responder para navegação. Se uma visualização personalizada se tornar first responder, ela deve implementar corretamente o protocolo UIAccessibility e informar seu status às tecnologias assistivas.

Para entrada personalizada (por exemplo, um leitor de código de barras ou teclado numérico), sobrescreva a propriedade inputView — retorne uma UIView personalizada que será exibida em vez do teclado padrão quando esta visualização for first responder. Da mesma forma, inputAccessoryView adiciona um painel acima do teclado.

Perguntas frequentes

O que é First Responder no iOS?

First Responder é o objeto UIResponder que atualmente recebe eventos de entrada (toque, teclas, acelerômetro). É atribuído através de becomeFirstResponder e deve retornar true de canBecomeFirstResponder. Apenas um objeto pode ser first responder em um aplicativo.

Como tornar UITextField first responder sem tocá-lo?

Chame textField.becomeFirstResponder() programaticamente, por exemplo, em viewDidAppear. Certifique-se de que textField não esteja oculto, userInteractionEnabled = true e isEnabled = true. Se o campo estiver dentro de um UITableView ou UICollectionView, certifique-se de que a célula esteja visível na tela.

Como ocultar o teclado tocando fora do campo de texto?

Adicione um UITapGestureRecognizer à visualização principal e chame view.endEditing(true) em seu manipulador. Isso encontrará automaticamente o first responder atual e chamará resignFirstResponder. Alternativamente, sobrescreva touchesBegan em UIViewController com uma chamada a endEditing.

Por que becomeFirstResponder retorna false?

becomeFirstResponder retorna false se canBecomeFirstResponder retornar false, a visualização estiver oculta, não estiver na hierarquia da janela ou userInteractionEnabled = false. Verifique também se a visualização foi adicionada à janela — uma visualização que não está na tela não responderá a becomeFirstResponder.

Como determinar qual objeto é atualmente o first responder?

O iOS não fornece uma API global para isso. Use um percurso recursivo da hierarquia de visualização através de uma extensão UIView que verifica isFirstResponder em cada subvisualização. Uma alternativa é armazenar uma referência fraca ao último first responder no AppDelegate e atualizá-la através de delegados UITextField.

Resumo

  • First Responder é o único objeto UIResponder que recebe eventos de entrada no iOS. É o primeiro elo na Cadeia de Respondedores.
  • becomeFirstResponder atribui o objeto como first responder, mas apenas se canBecomeFirstResponder retornar true — este é um mecanismo de proteção explícito do sistema.
  • resignFirstResponder remove o status de first responder; para campos de texto, isso oculta automaticamente o teclado.
  • UITextField e UITextView se tornam first responder ao receber foco e podem ser alterados programaticamente via becomeFirstResponder em outro campo.
  • view.endEditing(true) é uma maneira conveniente de renunciar para todos os objetos respondedores filhos na hierarquia de visualização.
  • Visualizações personalizadas podem se tornar first responder sobrescrevendo canBecomeFirstResponder para cenários de entrada específicos.
  • O rastreamento do first responder é implementado através de percurso recursivo de subvisualizações ou indiretamente através de notificações do teclado.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também