web-dev-qa-db-fra.com

Comment faire en sorte que la touche Retour effectue la même action qu’un bouton enfoncé dans Swift?

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?

48
Fiducial13

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
}
81
Steve Rosenberg

METTRE À JOUR

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

 connecting primary action triggered event

ORIGINAL

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.

73
rob mayoff

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

 enter image description here

3
Jacob Davis

Voici un exemple complet, à la fois: 

  1. 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

  2. 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 = ""
        }
        
    }
    
}

1
Fausto Checa

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
    }
0
Josh