キーボードが表示されたら、View Controller の UI 要素を移動する必要があります。これを行うには、アプリ デリゲートでキーボード通知を登録します。
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
次に、Apple の規定に従って通知を処理し (キーボード用の同様のコードが表示されました)、ビューを上下にスクロールします。
- (void)keyboardWasHidden:(NSNotification*)aNotification
{
CGRect viewFrame = [self.view frame];
viewFrame.origin.y += keyboardSize.height - TOOLBAR_HEIGHT;
self.view.frame = viewFrame;
}
ここまでは順調ですね。今問題の説明:
このコードを実行して OS 3.0 固有のメッセージ UI を表示すると:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[self presentModalViewController:picker animated:YES];
キーボードが実際のメール UI に表示されている場合でも、ビューをスクロールするキーボード通知が表示されるため、UI が壊れます (メール コントローラーが画面全体を占有し、この時点ではビューが表示されないことに注意してください)。
キーボード通知を一時的に無効にすることを望んでいたため、スクロールコードは次の行で呼び出されません。
[[NSNotificationCenter defaultCenter] removeObserver:self];
しかし、それは役に立ちません。キーボードはまだ投稿されています。
メッセージ UI によって作成されたときにキーボードで反応しないようにするにはどうすればよいですか?