Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2011年10月15日

iOS5でキーボード表示時にViewがずれる問題の対処法



iOS5でキーボードを表示させたときに、Viewが上部にずれる問題が発生する。
この現象は、iOS4以前でビルドされたアプリをiOS5環境のデバイスで実行した場合でも発生する。

この場合、キーボードが表示されたこと、あるいは入力モードが変更されたこと(日本語→英字、絵文字など)を感知してViewを固定する処理を記述しておけばよい。但し、デバイスのOSがiOS5以降でないとアプリが落ちるため、バージョンの判定を行い、iOS5.0以降の場合のみ、UITextInputCurrentInputModeDidChangeNotification の通知を行うこと。
- (void)viewDidLoad
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSString *versions = [[UIDevice currentDevice]systemVersion];

if ([versions compare:@"5.0"] != NSOrderedAscending ) { // iOS5.0以降の判定
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(keyboardWillChange:)
name:UITextInputCurrentInputModeDidChangeNotification object:nil];

[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(keyboardFrameWillChange:)
name:UIKeyboardWillChangeFrameNotification object:nil];


viewFrame = self.view.frame;

}

[pool release];
}

- (void)keyboardWillChange:(NSNotification*)notification{
self.view.frame = CGRectMake(0, 0, 320, 480); // iPhoneの場合
}

- (void)keyboardFrameWillChange:(NSNotification*)notification{
self.view.frame = CGRectMake(0, 0, 320, 480); // iPhoneの場合
}


self.view.frame = CGRectMake(0, 0, 320, 480);
はiPhoneの場合。

iPadなど画面サイズのiOSデバイスでも対応できるようにするためには、viewDidLoadメソッドで
self.view.frameの内容を例えばviewFrameに保持し、
self.view.frame = CGRectMake(0, 0, viewFrame.size.width, viewFrame.size.height);
のようにViewの横幅、高さを回復させる。



キーボードのフレームが変更されたときは、UIKeyboardWillChangeFrameNotification で検知する。
キーボードの表示されたとき、あるいは入力モードが変更されたときは、UITextInputCurrentInputModeDidChangeNotification で検知する。


参考記事:
http://bit.ly/oyxMc3
http://ai-lab.biz/blog/development/entry-320.html



タグ:IOS iPhone
posted by mobileDeveloper at 11:44 | Comment(0) | TrackBack(0) | キーボード はてなブックマーク - iOS5でキーボード表示時にViewがずれる問題の対処法 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。