responder resign outside how first dismisskeyboard ios swift uitextfield

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 .