Sé que necesito decirle a mi UITextField que renuncie al primer respondedor cuando quiero cerrar el teclado, pero no estoy seguro de cómo saber cuándo el usuario ha presionado la tecla "Listo" en el teclado. ¿Hay alguna notificación que pueda ver?
181
Respuestas:
Puse el delegado de la
UITextField
a miViewController
clase.En esa clase implementé este método de la siguiente manera:
fuente
NO
lugar deYES
?NO
, evita agregar un retorno de línea al texto.Si conecta el evento DidEndOnExit del campo de texto a una acción (IBAction) en InterfaceBuilder, se le enviará un mensaje cuando el usuario cierre el teclado (con la tecla de retorno) y el remitente será una referencia al UITextField que activó el evento.
Por ejemplo:
Luego, en InterfaceBuilder, vincule el evento DidEndOnExit del campo de texto a esta acción en su controlador (o lo que sea que esté utilizando para vincular eventos desde la IU). Siempre que el usuario ingrese texto y descarte el campo de texto, el controlador recibirá este mensaje.
fuente
También puede crear un método en su controlador
y luego en Connection Inspector en IB, conecte el Evento "Terminó al salir".
fuente
DidEndOnExit
evento, no necesita llamarresignFirstResponder
. Puede probar esto poniendo un punto de interrupción simbólico[UIResponder resignFirstResponder]
. Tenga en cuenta que incluso si no llama a resignFirstResponder, el sistema aún lo llama. Esto se explica en los excelentes libros de Matt Neuburg: apeth.com/iOSBook/…Kubi, gracias. Tu código funcionó. Solo para ser explícito (para los novatos como), ya que dice que debe establecer los
UITextField
'sdelegate
para que sean iguales al ViewController en el que reside el campo de texto. Puedes hacer esto donde quieras. Elegí elviewDidLoad
método.fuente
delegate
allí. No tiene que hacer esto mediante programación, como se demostró anteriormente. Cualquiera de los dos enfoques funciona bien.Aquí hay un truco para obtener un comportamiento de descarte automático del teclado sin ningún código. En el plumín, edite el objeto proxy Primer respondedor en el inspector de identidad, agregando una nueva acción de primer respondedor; Digamos que es
dummy:
. Ahora conecte el evento Did End on Exit del campo de texto a ladummy:
acción del objeto proxy First Responder. ¡Eso es! Dado que el evento Did End on Exit del campo de texto ahora tiene un par acción-objetivo, el campo de texto descarta automáticamente su teclado cuando el usuario toca Retorno; y dado que no hay penalización por no encontrar un controlador para un mensaje enviado por la cadena de respuesta, la aplicación no se bloquea a pesar de que no hay implementación dedummy:
ninguna parte.fuente
Solo agrega
donde desea desactivar el teclado y mostrar la vista del selector.
fuente
En Swift, puede escribir una IBAction en el controlador y establecer el evento Did End On Exit del campo de texto para esa acción
fuente
Swift 4.2
y funcionará al 100%fuente
También puedes usar
El mejor si tienes muchos Uitextfields:
fuente
Esto es lo que tuve que hacer para que funcione, y creo que es necesario para cualquier persona con un teclado numérico para un teclado (o cualquier otro sin un botón listo:
Creé una función llamada
Esto también se definió en el archivo .h.
Después de esto, me vinculé al bit 'touchdown' para ViewController en Interface Builder.
En la función 'se toca el fondo', pongo esto:
Solo recuerde cambiar 'answerField' por el nombre del UITextField del que desea quitar el teclado (obviamente, asegúrese de que su UITextField esté definido como se muestra a continuación :)
Sé que este tema probablemente murió hace mucho tiempo ... ¡pero espero que esto ayude a alguien, en algún lugar!
fuente
Notará que el método "textFieldShouldReturn" proporciona el objeto de campo de texto que ha pulsado la tecla HECHO. Si configura el TAG, puede activar ese campo de texto. O puede rastrear y comparar el puntero del objeto con algún valor de miembro almacenado por su creador.
Mi enfoque es así para un autoestudio:
Mientras tanto, pongo la prueba de "validación" que niega la renuncia que sigue. Es solo para ilustración, por lo que si el usuario escribe NO! en el campo, no se despedirá. El comportamiento fue el que quería, pero la secuencia de salida no fue la que esperaba.
A continuación se muestra mi salida NSLog para esta denegación seguida de la aceptación. ¿Te darás cuenta de que estoy devolviendo el resultado de la renuncia, pero esperaba que me devolviera FALSO para informar a la persona que llama? Aparte de eso, tiene el comportamiento necesario.
fuente
Aquí hay una manera bastante limpia de finalizar la edición con la tecla de retorno o un toque en segundo plano.
En el generador de interfaces, incruste sus campos en una vista de la clase UIFormView
Qué hace esta clase:
Aquí está el código:
Interfaz
Implementación
Al subclasificar el formulario y anular el
textFieldValueIsValid:
método, puede evitar el final de la edición si el valor no es correcto para el campo dado.Si un campo tiene un delegado establecido en Interface Builder, el formulario no lo cambia. No veo muchas razones para establecer un delegado diferente para un campo en particular, pero por qué no ...
Hay muchas maneras de mejorar esta clase de vista de formulario: Adjunte un delegado, haga un diseño, maneje cuando el teclado cubra un campo (usando el marco currentEditingTextField), inicie automáticamente la edición para el siguiente campo, ...
Personalmente lo mantengo en mi marco, y siempre lo subclasifico para agregar características, a menudo es útil "tal cual".
Espero que te sirva de ayuda. Saludos a todos
fuente
si desea toda la edición en un UIViewController puede usar.
y si desea descartar una ocultación de teclado UITextField perticular, use.
1.agregue delegado en su viewcontroller.h
hacer que la delegación no pueda en su campo de texto.
self.yourTextField.delegate = self;
agregue este método a su viewcontroller.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; devuelve SÍ;}
fuente
Configure programáticamente el delegado de UITextField en swift 3
Implemente UITextFieldDelegate en su archivo ViewController.Swift (por ejemplo, clase ViewController: UIViewController, UITextFieldDelegate {)
// Marca: - manejo de delegado textField ..
fuente
Cree una función hidekeyboard y vincúlela al campo de texto en el archivo .xib y seleccione DidEndOnExit
fuente
Si ha creado la vista usando Interface Builder, use lo siguiente Simplemente cree un método,
Simplemente haga clic con el botón derecho en el campo de texto en la vista, configure el evento como Finalizado al salir y conéctelo al método "despedir Teclado".
La mejor guía para principiantes es "Head First iPhone and iPad Development, 2nd Edition"
fuente
prueba esto
fuente
fuente
Cualquiera que busque Swift 3
1) Asegúrese de que su Delegado de UITextField esté conectado a su ViewController en el Guión gráfico
2) Implemente UITextFieldDelegate en su archivo ViewController.Swift (por ejemplo, clase ViewController: UIViewController, UITextFieldDelegate {)
3) Use el método de delegado a continuación
fuente
Así es como descarto el teclado en Swift 4.2 y funciona para mí:
fuente
Swift 3, iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: Todavía funciona bien para mí. Creo que el tipo que dedicó esta respuesta simplemente no entendió que necesita vincular esta acción al UITextField en el guión gráfico.
fuente
fuente