Dans Swift, [someTextField].resignFirstResponder()
et self.view.endEditing(true)
accomplissent la même tâche: masquer le clavier de la vue de l'utilisateur et dé-focaliser le champ de texte qui l'utilisait. Je comprends que le premier est spécifique à un champ particulier, tandis que le second englobe la vue entière, mais autre que vouloir cibler un champ de texte spécifique, quand est-ce que l'un est préféré/recommandé par rapport à l'autre?
someTextField.resignFirstResponder()
resignFirstResponder()
est utile à utiliser chaque fois que vous savez exactement quel champ de texte est le premier répondant et que vous souhaitez démissionner de son statut de premier répondant. Cela peut être légèrement plus efficace que l'alternative, mais si vous faites quelque chose comme la création d'un contrôle personnalisé, cela peut avoir beaucoup de sens. Vous avez peut-être un champ de texte, et lorsque vous appuyez sur le bouton "Suivant", vous voulez vous débarrasser du clavier et présenter un sélecteur de date, par exemple. Ici, j'utiliserais certainement resignFirstResponder()
self.view.endEditing(true)
Je réserve généralement cela pour les scénarios où j'ai juste absolument besoin d'effacer le clavier, peu importe ce qui se passe actuellement, pour une raison quelconque. Peut-être, j'ai un menu coulissant? Juste avant que cela ne glisse, peu importe ce qui se passe, le clavier devrait disparaître, donc je vais m'assurer que tout renonce à son statut de premier répondant. Il est important de noter que endEditing()
parcourra toute la hiérarchie des sous-vues et s'assurera que quel que soit le premier intervenant démissionne de son statut. Cela le rend moins efficace que d'appeler resignFirstResponder()
si vous avez déjà une référence concrète au premier répondeur, mais sinon, c'est plus facile que de trouver cette vue et de la faire démissionner.
Il n'y a pas de règle aussi stricte.
Vous utilisez resignFirstResponder
lorsque vous avez la référence du champ de texte contenant actuellement le statut de premier répondant. Lorsque vous n'avez pas la référence ou que vous n'êtes pas sûr de cela, endEditing
ferait l'affaire.
Il faut cependant noter que endEditing
a un paramètre booléen que nous définissons parfois sur true
. En définissant ce paramètre sur true
, la vue, sur laquelle endEditing
a été appelée, forcera chaque champ de texte enfant à démissionner du statut de premier répondant, indépendamment du fait qu'il ait renvoyé une valeur false
de textFieldShouldEndEditing
méthode déléguée. Au contraire, appeler endEditing
avec false
ne ferait que demander (pas forcer) le champ de texte à démissionner, en respectant la valeur de retour de la méthode de protocole textFieldShouldEndEditing
.