First Responder : ce que c’est, objectif et objet d’entrée

Auteur : IT Sectr Publié le : 2026-07-09 Temps de lecture : 9 min

First Responder est l’objet UIResponder dans iOS qui reçoit en premier les événements tactiles, les pressions de touches, les gestes d’agitation et les commandes de menu. À tout moment, un seul objet dans l’application peut être first responder. L’assignation se produit automatiquement (lorsqu’un UITextField obtient le focus) ou par programme via la méthode becomeFirstResponder. Selon la Documentation Développeur Apple (2026), un objet ne peut devenir first responder que si sa méthode canBecomeFirstResponder retourne true, rendant ce mécanisme explicite et contrôlable.

Points clés

  • First Responder est le principal récepteur des événements d’entrée, assigné automatiquement ou via becomeFirstResponder.
  • Un seul objet dans l’application peut être first responder à un moment donné.
  • canBecomeFirstResponder doit retourner true pour qu’un objet puisse devenir first responder.
  • ResignFirstResponder supprime le statut de first responder et masque le clavier pour UITextField.
  • UITextField et UITextView deviennent first responder lorsqu’ils reçoivent le focus de l’utilisateur.

Qu’est-ce que First Responder

First Responder est l’objet UIResponder qui reçoit actuellement les événements d’entrée dans une application iOS. Le système dirige tous les événements tactiles, pressions de touches, événements de mouvement (secouement de l’appareil) et messages d’action (par exemple, l’invocation d’un menu contextuel) vers cet objet.

Le concept de first responder est le premier maillon de la chaîne de répondeurs (Responder Chain). Si le first responder ne traite pas un événement reçu, celui-ci est automatiquement transmis à l’objet suivant dans la chaîne. Cela garantit qu’un événement n’est pas perdu mais est proposé séquentiellement à tous les gestionnaires potentiels dans la hiérarchie.

Selon Apple, le statut de first responder est étroitement lié à UIResponder et à ses méthodes canBecomeFirstResponder et becomeFirstResponder. Par défaut, UIView retourne true uniquement pour certaines sous-classes — UITextField, UITextView, UISearchBar. Les autres vues, y compris une UIView simple, retournent false, ce qui évite une assignation accidentelle.

Comment First Responder est assigné

L’assignation du first responder peut se produire de deux manières : automatiquement, lorsque l’utilisateur touche un UITextField (le système appelle becomeFirstResponder en interne), ou par programme, lorsque le développeur appelle explicitement la méthode becomeFirstResponder sur n’importe quel objet UIResponder.

Avant l’assignation, iOS vérifie canBecomeFirstResponder. Si la méthode retourne false, l’appel à becomeFirstResponder est ignoré et l’objet ne devient pas first responder. C’est un mécanisme de protection qui empêche l’assignation d’objets qui ne sont pas prêts à traiter des événements — par exemple, des éléments d’interface masqués ou désactivés.

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

// Assignation programmatique
textField.becomeFirstResponder()

// Vérifier si first responder
if textField.isFirstResponder {
    print("TextField est maintenant first responder")
}

Lorsqu’un nouveau first responder est assigné, iOS appelle automatiquement resignFirstResponder sur le précédent. Cela garantit qu’il y a toujours un seul objet avec le statut de first responder dans le système. Si le nouvel objet ne peut pas devenir first responder (canBecomeFirstResponder = false), l’ancien conserve son statut.

First Responder et le clavier

Le clavier iOS apparaît à l’écran précisément grâce au mécanisme de first responder. Lorsqu’un UITextField ou UITextView devient first responder, le système affiche automatiquement le clavier associé au keyboardType actuel de ce champ. Lorsque le first responder resign, le clavier se masque.

Ce comportement est un mécanisme UX clé dans iOS : l’utilisateur touche un champ de saisie — le clavier apparaît ; appuie sur Retour ou touche un autre champ — le clavier bascule ou se masque. Le développeur peut contrôler cela via les méthodes UIResponder, ainsi que via inputView et inputAccessoryView pour remplacer le clavier standard par un clavier personnalisé.

Input Accessory View est un panneau supplémentaire au-dessus du clavier qui est également lié au first responder. Par exemple, un panneau avec les boutons Suivant, Précédent, Terminé pour naviguer entre les champs de saisie. Il apparaît et se masque avec le clavier, en se synchronisant avec le statut de first responder.

ÉvénementStatut first responderClavier
Toucher UITextFieldDevient first responderApparaît
Appuyer sur RetourReste ou resignReste ou se masque
Toucher un autre champPasse au nouveau champBascule
Appeler resignFirstResponderSuppriméSe masque
Application en arrière-planResign automatiquementSe masque

Resign First Responder

ResignFirstResponder est une méthode UIResponder qui supprime le statut de first responder d’un objet. Après l’appel, l’objet cesse de recevoir des événements d’entrée et le clavier (s’il était actif) se masque. La méthode retourne un Booléen — true si le resign a réussi.

Les développeurs appellent souvent resignFirstResponder en réponse à l’appui sur le bouton Terminé, au toucher d’une zone vide de l’écran (view.endEditing) ou en quittant l’écran. view.endEditing(true) est un moyen pratique de resign pour tous les champs de texte enfants à la fois : il parcourt toute la hiérarchie de vues et appelle resignFirstResponder sur le first responder actuel.

swift
// Resign sur appui du bouton Terminé
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Resign sur toucher zone vide
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Resign pour tous les champs du formulaire
func validateAndSubmit() {
    view.endEditing(true)
    // Logique de soumission du formulaire
}

Il existe des situations où resignFirstResponder peut retourner false. Cela se produit si l’objet a surchargé la méthode et a explicitement interdit la suppression du statut. Par exemple, un champ de texte en cours de validation peut temporairement bloquer le resign pour éviter une perte de données. Dans ce cas, attendez la fin de la validation avant de resigner de force.

Vérification et suivi de First Responder

UIResponder fournit la propriété isFirstResponder (lecture seule), qui retourne true si l’objet donné est actuellement le first responder. C’est utile pour la logique conditionnelle — par exemple, pour éviter d’exécuter une action si un champ de texte est focus et que l’utilisateur saisit des données.

iOS ne fournit pas d’API intégrée pour obtenir le first responder actuel à l’échelle de l’application. Les développeurs y parviennent en parcourant la hiérarchie des vues avec la méthode UIResponder. Apple recommande une référence faible (weak reference) au first responder, qui peut être mise à jour via KVO ou des délégations.

swift
// Extension pour trouver first responder
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

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

Pour le suivi des changements du first responder, vous pouvez vous abonner à UIResponder.keyboardWillShowNotification et UIResponder.keyboardWillHideNotification — ils indiquent indirectement qu’un objet texte est devenu ou a cessé d’être le first responder. Cependant, il n’existe pas d’abonnement direct aux changements d’isFirstResponder ; on utilise KVO ou des délégations personnalisées.

First Responder et les vues personnalisées

Les vues personnalisées peuvent devenir first responder si elles surchargent canBecomeFirstResponder et retournent true. Cela est nécessaire pour les composants qui doivent recevoir des événements de clavier ou de boutons physiques — comme des manettes de jeu personnalisées ou des éditeurs de code basés sur UITextView.

Lors de la création d’un first responder personnalisé, il est important de prendre en compte l’accessibilité : VoiceOver et Switch Control dépendent de l’assignation correcte du first responder pour la navigation. Si une vue personnalisée devient first responder, elle doit implémenter correctement le protocole UIAccessibility et signaler son statut aux technologies d’assistance.

Pour une saisie personnalisée (par exemple, un lecteur de code-barres ou un clavier numérique), surchargez la propriété inputView — retournez une UIView personnalisée qui sera affichée au lieu du clavier standard lorsque cette vue est first responder. De même, inputAccessoryView ajoute un panneau au-dessus du clavier.

Foire aux questions

Qu’est-ce que First Responder dans iOS ?

First Responder est l’objet UIResponder qui reçoit actuellement les événements d’entrée (tactiles, touches, accéléromètre). Il est assigné via becomeFirstResponder et doit retourner true de canBecomeFirstResponder. Un seul objet peut être first responder dans une application.

Comment rendre UITextField first responder sans le toucher ?

Appelez textField.becomeFirstResponder() par programme, par exemple dans viewDidAppear. Assurez-vous que textField n’est pas masqué, que userInteractionEnabled = true et isEnabled = true. Si le champ se trouve dans un UITableView ou UICollectionView, vérifiez que la cellule est visible à l’écran.

Comment masquer le clavier en touchant en dehors du champ de texte ?

Ajoutez un UITapGestureRecognizer à la vue principale et appelez view.endEditing(true) dans son gestionnaire. Cela trouvera automatiquement le first responder actuel et appellera resignFirstResponder. Sinon, surchargez touchesBegan dans UIViewController avec un appel à endEditing.

Pourquoi becomeFirstResponder retourne false ?

becomeFirstResponder retourne false si canBecomeFirstResponder retourne false, si la vue est masquée, si elle n’est pas dans la hiérarchie de la fenêtre, ou si userInteractionEnabled = false. Vérifiez également que la vue est ajoutée à la fenêtre — une vue qui n’est pas à l’écran ne répondra pas à becomeFirstResponder.

Comment déterminer quel objet est actuellement first responder ?

iOS ne fournit pas d’API globale pour cela. Utilisez un parcours récursif de la hiérarchie des vues via une extension UIView qui vérifie isFirstResponder sur chaque sous-vue. Une alternative consiste à stocker une référence faible au dernier first responder dans AppDelegate et à la mettre à jour via les délégations UITextField.

Résumé

  • First Responder est le seul objet UIResponder qui reçoit les événements d’entrée dans iOS. C’est le premier maillon de la chaîne de répondeurs.
  • becomeFirstResponder assigne l’objet comme first responder, mais seulement si canBecomeFirstResponder retourne true — c’est un mécanisme de protection explicite du système.
  • resignFirstResponder supprime le statut de first responder ; pour les champs de texte, cela masque automatiquement le clavier.
  • UITextField et UITextView deviennent first responder au focus et peuvent être changés par programme via becomeFirstResponder sur un autre champ.
  • view.endEditing(true) est un moyen pratique de resign pour tous les objets répondeurs enfants dans la hiérarchie des vues.
  • Les vues personnalisées peuvent devenir first responder en surchargeant canBecomeFirstResponder pour des scénarios de saisie spécifiques.
  • Le suivi du first responder est implémenté par parcours récursif des sous-vues ou indirectement via les notifications du clavier.

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.

Discuter du projet

Lisez aussi