目的

iOSアプリにて、TextViewを設定する際に少し気をつけないけない点があります。
それはキーボードをどうやって閉じるかという点。

例えば以下の様な、TextViewが画面を覆っている画面構成だと、、

普通に設定した場合、
キーボードを表示させてからの、閉じる方法が無い。

なので、閉じる方法を実装するメモ

環境

  • Xcode Version 12.4
  • Swift 5

対応メモ

キーボードの上部にツールバーを設定し、完了ボタンを設置する。
設置方法をプログラムで作成する。
プログラム内容は以下。

キーボードの上部に完了ツールバーを設定
//対象のUITextView
@IBOutlet weak var myTextView: UITextView!

override func viewDidLoad() {
    
    ...
    
    //キーボードに完了のツールバーを作成
    let doneToolbar = UIToolbar()
    doneToolbar.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40)
    let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
    let doneButton = UIBarButtonItem(title: "完了", style: .done, target: self, action: #selector(doneButtonTaped))
    doneToolbar.items = [spacer, doneButton]
    myTextView.inputAccessoryView = doneToolbar

    ...
}

...

//完了ボタンタップ時に、キーボードを閉じる
@objc
func doneButtonTaped(sender: UIButton) {
    myTextView.endEditing(true)
}

挙動は以下。

以上です。