ソフトウェアキーボードのリターンキーを押すか、UIButtonをタップすることで、アクションを許可する方法を知りたいです。
UIボタンは、IBActionを実行するように既に設定されています。
ユーザーがキーボードのリターンキーを押して同じアクションを実行できるようにするにはどうすればよいですか?
クラスが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
}
デプロイメントターゲットがiOS 9.0以降の場合、次のように、テキストフィールドの「プライマリアクショントリガー」イベントをアクションに接続できます。
提案されたとおりに「プライマリアクショントリガー」を機能させることができませんでした。 「Editing Did End」を使用しましたが、今のところ動作します Editing Did Endのスクリーンショット
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
}
以下に両方の完全な例を示します。
ボタンを繰り返し押すとラベルとテキストを書き込み、クリアするボタンアクションは、両方のアクションを交互に切り替えます
キーを押すとキーボードに戻り、アクションをトリガーし、最初のレスポンダーも辞任します
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 = ""
}
}
}