2011年3月28日月曜日

[iOS]キーボードのフレーム(CGRect)を知る方法メモ

例えばUITextViewがfirstResponderになった時、画面の下の方からにゅっとキーボードが表示されます。
それはそれで全然問題ないのですが、キーボードのフレーム(CGRect)を知ろうにも、UITextViewDelegateなどではそれを知ることができません。

調べてみたらキーボードの表示/非表示時に通知(NSNotification)を受け取ることができ、キーボードのフレームを教えてくれるようです。

まずはinitなどのメソッド内でオブザーバーを追加。

NSNotificationCenter *nc =[NSNotificationCenter defaultCenter];
[nc addObserver:self
             selector:@selector(keyboardWillShow:) 
                 name:UIKeyboardWillShowNotification  // 表示時の通知
               object:nil];
[nc addObserver:self 
             selector:@selector(keyboardWillHide:) 
                 name:UIKeyboardWillHideNotification // 非表示時の通知
               object:nil];
こうするだけでUITextViewがfirstResponderになった時に通知してくれます。
- (void)keyboardWillShow:(NSNotification *)notification {
    CGRect keyboardRect; // キーボードのフレーム
    [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardRect];
}
UITextViewのinputAccessoryViewを利用している場合は、それを含むフレームになっています。

iOSアプリはキーボードの表示/非表示時に、ユーザーが入力しやすいように画面を変更することがあると思うのでけっこう使う局面はあるかと。

0 件のコメント: