イメージ
下記例でいうところのDoneボタンを表示する。
実装
ボタン部分の枠はUIToolbarで表示を行うと非常に楽。キーボードとUIToolbarのjoinはinputAccessoryViewで行える。
override func viewDidLoad() { super.viewDidLoad() // ツールバー生成 サイズはsizeToFitメソッドで自動で調整される。 let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) //サイズの自動調整。敢えて手動で実装したい場合はCGRectに記述してsizeToFitは呼び出さない。 toolBar.sizeToFit() // 左側のBarButtonItemはflexibleSpace。これがないと右に寄らない。 let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil) // Doneボタン let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(commitButtonTapped)) // BarButtonItemの配置 toolBar.items = [spacer, commitButton] // textViewのキーボードにツールバーを設定 textView.inputAccessoryView = toolBar }
Doneボタン押下時の処理
ここではキーボードを閉じる処理。
@objc func commitButtonTapped() { self.view.endEditing(true) }
TextView以外にタッチした時にキーボードを閉じる
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) }
リンク
リンク