UIScrollViewKeyboardDismissMode について
出たままのキーボードをスクロールされたら良い感じに閉じる
iOS 純正アプリの Messages みたいなキーボードの挙動をやりたいなー、と調べていました。
どういう挙動かというと、
- キーボードが出ている状態でスクロールダウンすると、それに伴ってキーボードも下がる
- ドラッグしながら下げるのをやめて上にあげるとキーボードも戻ってくる
と、大変インタラクティブな挙動になっているのです。
まぁここまでやらなくとも、せめてスクロールビューへのドラッグなどのジェスチャーを検知して
キーボードを dismiss したいと思いました。
iOS 7 以前
iOS 7 より前では、簡単に実装するとすればスクロールビューに以下のようなことを
していてフックしていたかなと思い出しました。
- UIGestureRecognizer をスクロールビューに付与してイベントを取得
- UIScrollViewDelegate を受け取り、スクロールイベントを取得
上記のイベントをフックして、
[textField resignFirstResponder];
を実行していたかと思います。
これでも良いんですが、例えばiOS 純正アプリの Messages のインタラクティブ
なことをやろうとすると非常に手間で独自実装が増えてしまいます。
iOS 7
ここからようやく本題です。
タイトルにもある UIScrollViewKeyboardDismissMode という
UIScrollView に keyboardDismissMode としてプロパティがあります。
デフォルトでは UIScrollViewKeyboardDismissModeNone
が設定されているため、
- インタラクティブしたいなら
UIScrollViewKeyboardDismissModeInteractive
- 単純にドラッグされた時にキーボードを消すだけなら
UIScrollViewKeyboardDismissModeOnDrag
を設定するだけです。
iOS 7 からは、これだけでスクロール時のキーボード表示/非表示を行う事ができます。