How do I get the return key to perform the same action as a button press in Swift?

前端 未结 5 1988
一向
一向 2020-12-12 23:42

I want to know how you allow an action to be made by either pressing the return key on the software keyboard or by tapping a UIButton.

The UI button is already set u

相关标签:
5条回答
  • 2020-12-12 23:57

    Here is a complete example, with both:

    1. button-action to write and also to clear label and text when pressing button repeatedly it alternates both actions

    2. return-in-keyboard when pressing key it triggers action and also resigns first responder

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

    0 讨论(0)
  • 2020-12-13 00:00

    If your deployment target is iOS 9.0 or later, you can connect the “Primary Action Triggered” event of your text field to an action, like this:

    I was not able to get the "Primary Action Triggered" to work as suggested. I used "Editing Did End" and that works for now Screenshot of Editing Did End

    0 讨论(0)
  • 2020-12-13 00:01

    UPDATE

    If your deployment target is iOS 9.0 or later, you can connect the “Primary Action Triggered” event of your text field to an action, like this:

    ORIGINAL

    Make your view controller adopt the UITextFieldDelegate protocol.

    Set your text field's delegate to your view controller.

    Implement textFieldShouldReturn: to call your action.

    0 讨论(0)
  • 2020-12-13 00:05

    Make sure your class extends the UITextFieldDelegate protocol

    SomeViewControllerClass : UIViewController, UITextFieldDelegate
    

    You can perform action as follows:

    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
    }
    
    0 讨论(0)
  • 2020-12-13 00:06

    Swift 4.2 :

    Other approach for the textfield created programmatically and doesn't need delegate :

         MyTextField.addTarget(self, action: #selector(MyTextFielAction)
                                   , for: UIControl.Event.primaryActionTriggered)
    

    And then perform your action like below :

        func MyTextFielAction(textField: UITextField) {
           //YOUR CODE can perform same action as your UIButton
        }
    
    0 讨论(0)
提交回复
热议问题