web-dev-qa-db-ja.com

Swiftのボタンを押すのと同じアクションを実行するためにリターンキーを取得するにはどうすればよいですか?

ソフトウェアキーボードのリターンキーを押すか、UIButtonをタップすることで、アクションを許可する方法を知りたいです。

UIボタンは、IBActionを実行するように既に設定されています。

ユーザーがキーボードのリターンキーを押して同じアクションを実行できるようにするにはどうすればよいですか?

58
Fiducial13

クラスがUITextFieldDelegateプロトコルを拡張していることを確認してください

SomeViewControllerClass : UIViewController, UITextFieldDelegate

次のようにアクションを実行できます。

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

更新

デプロイメントターゲットがiOS 9.0以降の場合、次のように、テキストフィールドの「プライマリアクショントリガー」イベントをアクションに接続できます。

connecting primary action triggered event

元の

View ControllerにUITextFieldDelegateプロトコルを採用させます。

テキストフィールドのデリゲートをView Controllerに設定します。

textFieldShouldReturn:を実装して、アクションを呼び出します。

77
rob mayoff

デプロイメントターゲットがiOS 9.0以降の場合、次のように、テキストフィールドの「プライマリアクショントリガー」イベントをアクションに接続できます。

提案されたとおりに「プライマリアクショントリガー」を機能させることができませんでした。 「Editing Did End」を使用しましたが、今のところ動作します Editing Did Endのスクリーンショット

enter image description here

3
Jacob Davis

Swift 4.2:

プログラムで作成され、デリゲートを必要としないテキストフィールドの他のアプローチ:

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

次に、以下のようなアクションを実行します。

    func MyTextFielAction(textField: UITextField) {
       //YOUR CODE can perform same action as your UIButton
    }
1
Josh

以下に両方の完全な例を示します。

  1. ボタンを繰り返し押すとラベルとテキストを書き込み、クリアするボタンアクションは、両方のアクションを交互に切り替えます

  2. キーを押すとキーボードに戻り、アクションをトリガーし、最初のレスポンダーも辞任します

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