2013年3月15日金曜日

#iOS 外部キーボード使用時にUIKeyboardなんちゃらの通知が 飛んでこないという話

先日拙作アプリの文字入力周りを変更したら思わぬ不具合報告があったのでメモしておきます。


UITextFieldやUITextViewが入力状態になった時(First Responderになった時)、通常はiOSのソフトウェアキーボードが画面に表示されるタイミングでUIKeyboardWillShowUIKeyboardDidShowといった通知が飛んできます。

ところが、外部キーボードを使用しているときはこれらの通知が飛んできません

なので例えばUIKeyboardWillShowの通知で入力状態の初期化などを行っている場合はまずいことになります。
日本語のソフトキーボードだとキーボードの高さが変わったりするので、特に日本の開発者さんなんかはこのあたりでけっこう色々やってることが多いのではないでしょうか。

ややこしいのはUITextFieldやUITextViewのinputAccessoryViewにViewを指定してるとちゃんと通知が飛んでくるらしいのですよね。

外部キーボードが使用されることを想定して、例えばUITextViewだったらtextViewDidBeginEditing:などで処理を行うのがよさそうです。



外部キーボード持ってないよという方はアプリを使えばMacとiOSデバイスをBluetoothでつないでMacを外部キーボード化できます。

iKeyboard
http://appstore.com/mac/ikeyboard

Type2Phone
http://itunes.com/mac/type2phone


参考:
How can I detect if an external keyboard is present on an iPad?
http://stackoverflow.com/questions/2893267/how-can-i-detect-if-an-external-keyboard-is-present-on-an-ipad

0 件のコメント: