iPhoneのキーボードを消すバー

Kautandeを使っていると,iPhoneのキーボードが消えなくなることがあります。

SDKドキュメントを見ると

Dismissing the Keyboard

Depending on how you configured the keyboard, you might need to add some additional controls to your user interface to facilitate the keyboard's dismissal.

プログラマがどのように設定するかにもよるが,もしかしたらキーボードを消すのを手助けする追加コントロールをユーザインターフェイスに加える必要があるかも知れない。

なんてことが書いてあるのですが,ナビゲーションバーに付けるとかもスペース的に苦しいし,テキストビューの上部・下部というのもいただけない感じ。

その辺に無理矢理追加するんじゃなくて,Safariでフォーム入力しようとすると現われるキーボードに付いている,あのボタン群。あれが欲しいというわけです。

SafariKeyboard.png

それで,以前から,このボタン群,何とかして手に入んないかな〜って思っていたんです。
今日,ふと,改めてよくよく見てみると,キーボードの上部に完全に外付けのようなんですね。一緒にスクロールしてくるんでキーボードが拡張されているのか何かなのかと思ってましたが。

で,それだったら何かそれっぽいことが出来るんじゃないか?ということで,やってみました。

TestKeyboard.png

UIToolbarを用意して,UIKeyboardWillShow(&Hide)Notificationを受け取り,UIViewのanimationWithDuration系の処理で動かす,というようなものになります。
キーボードが下からスクロールしてくるのに合わせて,バーが上がってきますし,本体の回転にも追従します。

サンプルアプリのソースコードを置いておきます。
この中に入っているDismissKeyboardPadというクラスをアプリの先頭あたりで,[[DismissKeyboardPad alloc] init]; するだけで,すべてのテキスト入力部分にこのバーが付くようになります。
実際には,すべての箇所でこのバーが付かなくても良いケースもあるとは思いますが,参考にはなると思います。

DismissKeyboard.dmg.zip

1点だけ課題があって,それはキーボードが表示されるタイミングが,アプリ起動直後の1回目だけ遅く,それ以降は早い,ということで,そのせいで1回目だけ,ツールバーの表示タイミングがキーボードの表示タイミングとずれます(delay:0.0001fは,そのためのあがきです)。
WillShowではなくDidShowで引っかけた方が良いのかも知れません。