(UITextViewの)キーボードに「閉じる」ボタンを追加する
スポンサーリンク
大したネタではないけど、iOSのUITextViewで編集可能に場合に表示されるキーボードに「閉じる」ボタンを追加する方法のメモ。
StoryBoardでkeybord
の設定項目をDismiss intractiely
に設定しておけばテキスト表示エリアをした方向にスクロールすれば勝手に
キーボードは非表示になる。…のだけれど、これは知らないとどうしていいかわからないのではないかと思う。
で、ボタンの追加方法を知るべくGoogle先生にお伺いをたてる…。
とか、
swiftでuitextviewに完了ボタンを設置してキーボードを閉じる方法 - とりあえずphpとか
この辺がヒットする。
が、なんかめんどくさいのでもっと楽な方法ないのって探すとObjective-Cのケースが見つかる。
どうやらおおもとのネタは下記のページだそうで。
キーボードを閉じるためのボタンを追加する « sabitori works
UIViewでやるかUIToolBarでやるかは好みの問題だけど、よほど見た目に凝らない限りはUIToolBarでいいかと思う。
UIToolBarを使う方がスマートそうだね、ってことでSwift2でやってみる。
すでにUITextViewはStoryBoardでセットしてあるものとして、デリゲートを追加、Outletを追加。
class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var myTextView: UITextView! (略)
対象のViewController
の、viewDidLoad
に下記を追加。inputAccessoryView
がポイント。
// 仮のサイズでツールバー生成 let kbToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 40)) kbToolBar.barStyle = UIBarStyle.Default // スタイルを設定 kbToolBar.sizeToFit() // 画面幅に合わせてサイズを変更 // スペーサー let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil) // 閉じるボタン let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "commitButtonTapped") kbToolBar.items = [spacer, commitButton] myTextView.inputAccessoryView = kbToolBar
ボタンが押された時に呼ばれるアクション
func commitButtonTapped (){ self.view.endEditing(true) }
見た目はこんな感じ。
少ない行数で済むし、システムのデフォルトとの統一感もあっていいかと。
おしまい。