textfielddidchange - uitextfield editing changed swift
Rápido cómo renunciar al primer respondedor en todos los uiTextfield (6)
Me gustaría usar resignar el primer respondedor en todos los uitextfield
. Puedo completar esto colocando los uitextfields
en una matriz, pero quería evitar usar la matriz. la renuncia debe suceder a todo tipo de uiTextField cómo se puede hacer esto.
Esto funciona bien
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var text: UITextField!
@IBOutlet weak var textFieldtwo: UITextField!
var textField = [UITextField]()
override func viewDidLoad() {
super.viewDidLoad()
self.textField = [text,textFieldtwo]
for item in textField {
item.delegate = self
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("text")
for item in textField {
item.resignFirstResponder()
}
}
}
resignFirstResponder con botones de barras de herramientas Swift4 ##
Puede intentar esto: 1. marque el campo de texto delegado
class CoursesViewController: UIViewController,UITextFieldDelegate {
crea un campo de texto var:
var currentTextField:UITextField!
cree los botones "hecho" y "cancelar" en la barra de herramientas de su TextField
func addDoneCancel(_ textField : UITextField) { curentTextField = textField // ToolBar let toolBar = UIToolbar() toolBar.barStyle = .default toolBar.isTranslucent = true toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1) toolBar.sizeToFit() // Adding Button ToolBar let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(CoursesViewController.doneClick)) let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(CoursesViewController.cancelClick)) toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) toolBar.isUserInteractionEnabled = true textField.inputAccessoryView = toolBar }
4. Acciones de los botones de la barra de herramientas.
@objc func doneClick(){
curentTextField.resignFirstResponder()
}
@objc func cancelClick(){
curentTextField.resignFirstResponder()
}
5. delegado de UItextField
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
curentTextField = textField
addDoneCancel(textField)
return true
}
func textFieldDidBeginEditing(_ textField: UITextField) {
//delegate method
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
//delegate method
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//delegate method
textField.resignFirstResponder()
return true
}
Ahora en Swift 3, los métodos más fáciles son
Método 1: se llama cuando se pulsa la tecla ''retorno''.
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField1.resignFirstResponder()
textField2.resignFirstResponder()
return true;
}
Método 2: se llama cuando se pulsa la tecla ''retorno''.
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
self.view.endEditing(true)
return true;
}
Método 3: carga global del método en vista
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
Nota: No olvides añadir esto. Por otro lado no funciona.
UIGestureRecognizerDelegate, UITextFieldDelegate
Espero que funcione para ti :)
O simplemente utilice un enfoque más global. (Swift 3.0)
UIApplication.shared.sendAction(#selector(UIApplication.resignFirstResponder), to: nil, from: nil, for: nil);
Esto descartará cualquier campo activo ya que renuncia al primer respondedor actual. ¡Buena suerte programando!
Puedes probar esto:
for textField in self.view.subviews where textField is UITextField {
textField.resignFirstResponder()
}
Pero si solo desea descartar el teclado, presione la tecla de return
en el keyboard
o toque en cualquier lugar de la pantalla sin usar touchesBegan
Puedes probar con esto:
// For pressing return on the keyboard to dismiss keyboard
func textFieldShouldReturn(textField: UITextField) -> Bool {
for textField in self.view.subviews where textField is UITextField {
textField.resignFirstResponder()
}
return true
}
...
func hideKeyboard() {
view.endEditing(true)
}
Y agregue esto a su viewDidLoad
:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))
view.addGestureRecognizer(tapGesture)
Un enfoque más simple sería terminar la edición en UIView que contiene los UITextFields diciendo:
view.endEditing(true)
Swift 4:
En caso de tener IBOutlets:
_ = [textFiledOne, textFiledTwo, textFiledThree].map() { $0.resignFirstResponder() }