【Swift】【XCode】UITextFieldのキーボードの扱い

目次

UITextFIedlを使用したときのキーボードの扱い

returnキーでキーボードをしまう

  • UITextFieldDelegateを実装し、returnキーを押したイベントを取得します。
  • UITextFieldresignFirstResponder関数を使うことで、ファーストレスポンダをやめます。
    • UITextFieldは、ファーストレスポンダになるとキーボードを表示し、やめると、キーボードを非表示にする性質を持っています。
  • textFieldShouldReturn関数trueを返すことで、returnキーを押したイベントを発行し処理を実行します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ViewController: UIViewController,UITextFieldDelegate{

@IBOutlet weak var testTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

// プロトコルの実装
testTextField.delegate = self
}

// reutnrキーが入力されると呼ばれる
func textFieldShouldReturn(_ textField:UITextField)->Bool{
textField.resignFirstResponder()
return true
}
}

キーボードの外をタップして、キーボードをしまう

  • UIViewControllerに用意されている、touchesBeganメソッドをオーバーライドすることで、Viewのタップイベントを取得できる
  • UIViewクラスendEditing関数に対して、trueを設定することで、強制的に現在のファーストレスポンダをやめさせます。
    • endEditing関数だけ、UITextFieldクラスと同じファイルに記述してあった。
      1
      2
      3
      4
      extension UIView {

      open func endEditing(_ force: Bool) -> Bool // use to make the view or any subview that is the first responder resign (optionally force)
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class ViewController: UIViewController{

      @IBOutlet weak var testTextField: UITextField!

      override func viewDidLoad() {
      super.viewDidLoad()
      }

      override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
      view.endEditing(true)
      }
      }

view.endEditing(true)とtextField.resignFirstResponder()の違い

view.endEditing(true)を使えば、reutrnキーでキーボードをしまうの処理もできてしまいます。では、2つのキーボードのしまい方の違いは何なのでしょうか。

  • view.endEditing(true) : 現在の画面内で現在のファーストレスポンダをやめさせます。結果として、UITextFiledresignFirstResponder関数を呼んでいます。

  • textField.resignFirstResponder : returnキーを押したイベントが発火したことで、引数のUITextFieldファーストレスポンダだとわかっているので、引数のresignFirstResponder関数を呼ぶことで、ファーストレスポンダをやめさせています。

結果として、どちらもresignFirstResponder関数を呼んでいることになります。

Author

Daiki Iijima

Posted on

2021-07-16

Updated on

2024-04-17

Licensed under