ios - outside - resignFirstResponder vs. endEditing for Keyboard Dismissal
how to hide keyboard in ios (2)
someTextField.resignFirstResponder()
resignFirstResponder()
es bueno para usar cada vez que sepa exactamente qué campo de texto es el primer respondedor y desea renunciar a su estado de primer respondedor.
Esto puede ser un poco más eficiente que la alternativa, pero si está haciendo algo como crear un control personalizado, esto puede tener mucho sentido.
Quizás tenga un campo de texto y, cuando se presiona el botón "Siguiente", desee deshacerse del teclado y presentar un selector de fecha, por ejemplo.
Aquí, definitivamente usaría
resignFirstResponder()
self.view.endEditing(true)
Por lo general, reservo esto para escenarios en los que simplemente necesito limpiar el teclado sin importar lo que esté sucediendo actualmente, por cualquier razón.
Tal vez, ¿tengo un menú deslizable?
Justo antes de que esto se deslice, no importa lo que esté sucediendo, el teclado debería desaparecer, así que me aseguraré de que
todo
renuncie a su primer estado de respuesta.
Es importante tener en cuenta que
endEditing()
examinará toda la jerarquía de subvistas y se asegurará de que cualquiera que sea el primer respondedor renuncie a su estado.
Esto lo hace menos eficiente que llamar a
resignFirstResponder()
si ya tiene una referencia concreta al primer respondedor, pero si no, es más fácil que encontrar esa vista y hacer que renuncie.
En Swift, tanto
[someTextField].resignFirstResponder()
como
self.view.endEditing(true)
realizan la misma tarea: ocultar el teclado de la vista del usuario y
self.view.endEditing(true)
cualquier campo de texto que lo esté utilizando.
Entiendo que el primero es específico para un campo en particular, mientras que el segundo abarca la vista completa, pero aparte de querer apuntar a un campo de texto específico, ¿cuándo se prefiere / recomienda uno sobre el otro?
No existe una regla tan estricta.
Utiliza
resignFirstResponder
cuando tiene la referencia del campo de texto que actualmente contiene el estado del primer respondedor.
Cuando no tiene la referencia o no está seguro de eso,
endEditing
haría el truco.
Sin embargo, hay que tener en cuenta que
endEditing
tiene un parámetro booleano que ocasionalmente establecemos en
true
.
Al establecer este parámetro en
true
la vista, en la que se ha llamado
endEditing
, obligará a cada campo de texto secundario a renunciar al estado del primer respondedor, independientemente de que haya devuelto un valor
false
del método de delegado
textFieldShouldEndEditing
.
Por el contrario, llamar a
endEditing
con
false
solo pediría (no forzaría) al campo de texto a renunciar, respetando el valor de
textFieldShouldEndEditing
método de protocolo
textFieldShouldEndEditing
.