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の分割キーボード対応