目的

ScrollViewで画面タッチ認識処理を入れたい場合。
例えば、
ScrollView上にTextFieldがあり、入力後に画面(TextField以外の部分)をタップすることで
キーボードを閉じたい時など

の実装メモ





環境

  • Xcode Version 13.2.1
  • Swift 5




対応メモ

一般的に入力部分以外のタップでキーボードを閉じるときは override func touchesBeganが使われるけど、
ScrollViewを実装している場合は、touchesBeganは呼び出されない
ようなので、別の手段を取る必要がある。

以下のようにスクロール画面にジェスチャーを設定した。

入力部分以外のタップでキーボードを閉じる
@IBOutlet weak var myScrollView: UIScrollView!

...
        
// ジェスチャーの生成
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture))
myScrollView.addGestureRecognizer(tapGestureRecognizer)

...

@objc func tapGesture(gestureRecognizer: UITapGestureRecognizer){
    //キーボード閉じる処理
    xxx.resignFirstResponder()
    ...
}

以上。