読者です 読者をやめる 読者になる 読者になる

替え玉バリカタでお願いします

お仕事と、お仕事そうでお仕事じゃない、少しお仕事な備忘など。

ソフトウェアキーボード取得(Landscape)の注意点

iOS

iOSのソフトウェアキーボードのサイズを取る方法は、色々なブログにある。
しかし、なぜかLandscape表示での使い方が殆ど見つからないのでメモしておく。

よくある例(不完全)

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary *userInfo = [aNotification userInfo];
    CGRect keyboardRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    // このままkeyboardRectを使うと、
    // Landscapeのときにうまくいかない!
}

正しい例

 - (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary *userInfo = [aNotification userInfo];
    CGRect keyboardRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect convertedRect = [self.view convertRect:keyboardRect fromView:nil]; /*これを使う*/

    // デバイス回転を考慮したconvertedRectを使うこと!
}

参考:
http://stackoverflow.com/questions/2474671/uikeyboard-resize-on-orientation-change-to-landscape