Je veux savoir comment vous autorisez une action en appuyant sur la touche retour du clavier du logiciel ou en tapotant un bouton UIB.
Le bouton d'interface utilisateur est déjà configuré pour effectuer une action IBAction.
Comment puis-je également autoriser les utilisateurs à appuyer sur la touche Retour du clavier pour effectuer la même action?
Assurez-vous que votre classe étend le protocole UITextFieldDelegate
SomeViewControllerClass : UIViewController, UITextFieldDelegate
Vous pouvez effectuer une action comme suit:
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
}
Si votre cible de déploiement est iOS 9.0 ou une version ultérieure, vous pouvez connecter l'événement «Action principale déclenchée» de votre champ de texte à une action, telle que
Faites en sorte que votre contrôleur de vue adopte le protocole UITextFieldDelegate
.
Définissez le délégué de votre champ de texte sur votre contrôleur de vue.
Implémentez textFieldShouldReturn:
pour appeler votre action.
Si votre cible de déploiement est iOS 9.0 ou une version ultérieure, vous pouvez connecter l'événement «Action principale déclenchée» de votre champ de texte à une action, telle que
Je n'ai pas réussi à faire en sorte que "l'action principale déclenchée" fonctionne comme suggéré. J'ai utilisé "Editing Did End" et cela fonctionne pour l'instant Capture d'écran de Editing Did End
Voici un exemple complet, à la fois:
bouton-action pour écrire et effacer l'étiquette et le texte lorsque vous appuyez plusieurs fois sur le bouton, les deux actions sont alternées
retour au clavier lorsque vous appuyez sur la touche, une action est déclenchée et le premier répondant démissionne
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 = ""
}
}
}
Swift 4.2:
Autre approche pour le champ de texte créé par programme et ne nécessitant pas de délégué:
MyTextField.addTarget(self, action: #selector(MyTextFielAction)
, for: UIControl.Event.primaryActionTriggered)
Et puis effectuez votre action comme ci-dessous:
func MyTextFielAction(textField: UITextField) {
//YOUR CODE can perform same action as your UIButton
}