[Xcode] iPad 分割キーボードの判別

iPadキーボードの分割キーボードは、なにかしらプロパティを見れば一発で判断できるかなーと調べてたけど、そんなプロパティが見つからない。

ありそうなのに見つからない。

結局確実なのはよくわからないというのを先に書いておきます^^;

以下は、現状のキーボード挙動から対応したため、iOSがバージョンアップされて動作が変わってしまうと、その都度対応が必要そうです。

なぜSplitを判断したいのかというと、

TextViewへのテキスト入力時、

全画面にしたいのだけど、

キーボード分割や、通常サイズのキーボードで縦移動されていた場合に、入力部分をどうすればいいのか、という課題があります。

そんなときは”なにもしない”ようにしたいので、
・固定な時は全画面表示
・分割や移動されている時はなにもしない
分岐をしたいのです。

分割な時は、なにもしない。

分割キーボード呼出し時、サイズの変更時には、
-(void)keyboardWillChangeFrame:(NSNotification*)notification
が通知されます。

このときに、TextViewのサイズ変更などをするのだけど、
固定か分割か、ここで取得できる、キーボードのRect情報で判別します。

NSDictionary *info = [notification userInfo];
NSValue *keyVal = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [keyVal CGRectValue];
CGSize keyboardSize = keyboardRect.size;

        //分割時はリサイズしない
        //Splitの場合
        if(keyboardSize.width == 0 ||
           keyboardSize.width == 216.0 || keyboardSize.height == 216.0 ||
           keyboardSize.width == 176.0 || keyboardSize.height == 176.0 ){
            return;
        }
        
        //margeで移動されている場合
        switch ([UIApplication sharedApplication].statusBarOrientation) {
            case UIInterfaceOrientationPortrait:
            case UIInterfaceOrientationPortraitUpsideDown:
                if(keyboardRect.origin.y < 706 || keyboardRect.origin.y == 1024.0 ){
                    return;
                }
                break;
            case UIInterfaceOrientationLandscapeLeft:
            case UIInterfaceOrientationLandscapeRight:
                if(keyboardRect.origin.x != 0.0 ){
                    return;
                }
                break;
        }

(convertRectがうまく使えなかったので、こんな感じに。。)

分割時はキーボードの高さが216,176の2種類ありました。
標準サイズ以外という判断のほうがいいのかも。

固定から分割へ変更される時などに、keyboardSizeに(0,0)が来ます。

keyboardRect.origin.y < 706 ポートレートで、移動されている場合は、場所が706より小さい keyboardRect.origin.y == 1024.0 これは、キーボードを閉じる際のリサイズが行われないように。 この判断処理のあとには、サイズ変更処理があります。 固定キーボード時の、日本語←→英語キーボードの場合、変換候補viewの表示/非表示があるのでリサイズが必要です。 iPhoneと同じ。 分割時、以下は呼ばれていない。 -(void)keyboardWillShow:(NSNotification*)notification -(void)keyboardWillHide:(NSNotification*)notification 固定時は呼ばれます。 keyboardWillShowでのTextViewサイズ変更と、 keyboardWillHideで、元のTextViewサイズへ戻す処理に関しては、iPhoneと同じ感じでよかったです。 iPhoneと違って画面の大きいiPadで、全画面編集とする必要性はあまりないとも言えるんだけど、 インシデントしてみようかも考えつつ、こんな感じでやってみました。 また調べ直しそう。 もっといいやり方があれば教えてください! 関連→ [Xcode] iOS7 iPadの分割キーボード対応

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする