xcode - ¿Cómo consigo que la tecla de retorno realice la misma acción que presionar un botón en Swift?
ios8 (5)
Si su objetivo de implementación es iOS 9.0 o posterior, puede conectar el evento “Acción principal activada” de su campo de texto a una acción, como esta:
No pude lograr que la "Acción primaria activada" funcionara como se sugirió. Usé "Editing Did End" y eso funciona por ahora Captura de pantalla de Editing Did End
Quiero saber cómo permite que se realice una acción presionando la tecla de retorno en el teclado del software o tocando un botón UIB.
El botón UI ya está configurado para realizar una IBAction.
¿Cómo puedo permitir que los usuarios presionen la tecla de retorno en el teclado para realizar la misma acción?
ACTUALIZAR
Si su objetivo de implementación es iOS 9.0 o posterior, puede conectar el evento “Acción principal activada” de su campo de texto a una acción, como esta:
ORIGINAL
Haga que su controlador de vista adopte el protocolo
UITextFieldDelegate
.
Configure el delegado de su campo de texto en su controlador de vista.
Implemente
textFieldShouldReturn:
para llamar a su acción.
Aquí hay un ejemplo completo, con ambos:
-
acción del botón para escribir y también para borrar la etiqueta y el texto al presionar el botón repetidamente alterna ambas acciones
-
regresar al teclado al presionar la tecla, activa la acción y también renuncia al primer respondedor
func MyTextFielAction(textField: UITextField) {
//YOUR CODE can perform same action as your UIButton
}
Asegúrese de que su clase extienda el protocolo UITextFieldDelegate
SomeViewControllerClass : UIViewController, UITextFieldDelegate
Puede realizar acciones de la siguiente manera:
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
//textField code
textField.resignFirstResponder() //if desired
performAction()
return true
}
func performAction() {
//action events
}
Swift 4.2:
Otro enfoque para el campo de texto creado mediante programación y no necesita delegado:
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var label1: UILabel!
var buttonHasBeenPressed = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
textField1.delegate = self
}
@IBAction func buttonGo(_ sender: Any) {
performAction()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
performAction()
return true
}
func performAction() {
buttonHasBeenPressed = !buttonHasBeenPressed
if buttonHasBeenPressed == true {
label1.text = textField1.text
} else {
textField1.text = ""
label1.text = ""
}
}
}
Y luego realiza tu acción como a continuación:
MyTextField.addTarget(self, action: #selector(MyTextFielAction)
, for: UIControl.Event.primaryActionTriggered)