Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> iOSアプリ開発(Swift、Objective-C) -> Objective-Cで、キーボードの座標や寸法を正確に取得する方法

Objective-Cで、キーボードの座標や寸法を正確に取得する方法


昔、Objective-Cで作ったアプリを、iOS13に対応したかったのですが、iPhoneのバージョンが上がるにつれ、だんだんと、キーボードの座標や寸法が違う機種が現れやがり、困りました・・・orz

という事で、キーボードの座標や寸法を正確に計算する方法です。

まず、ViewDidLoadなどの、アプリケーションのエントリポイント的なメソッドの中に、NSNotificationCenterのaddObserverを使って、キーボードが表示された時にコールバック関数を呼べるようにします。

あとは、事前に作っておいたコールバック関数内でデータを取得しちゃえばOKです。

下記、例文です。

ロジックは超簡単ですが、Objective-Cで書くと、暗号のようですねw

-(void)keyboardDidShow:(NSNotification*)notification{
// [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]に、座標情報がCGRectで格納されています。
// 例えば、キーボードの真上に50pxのビューを表示させたい場合は、下記のように記述すればおkです。
int y = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
[testView setFrame:CGRectMake(txtBar.frame.origin.x, y - 50, txtBar.frame.size.width, 50)];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ↑ViewDidLoadとか、どこでも良いので、アプリケーションが起動した直後のメソッドに、下記を追加します。
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
}


最初に記事を書いた日:2019/10/30

この記事をシェアする

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

関連記事

Meteoric Streamについて

管理人

Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> iOSアプリ開発(Swift、Objective-C) -> Objective-Cで、キーボードの座標や寸法を正確に取得する方法