0

キーボードが表示されたら、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 によって作成されたときにキーボードで反応しないようにするにはどうすればよいですか?

4

1 に答える 1

1

BOOLプロパティまたはインスタンス変数を追加します。これは、メソッドとメソッドcareAboutKeyboardの両方にアクセスできます。おそらく、これらのメソッドが含まれているビュー コントローラー内にあります。keyboardWasShown:keywardWasHidden:

メソッドでYESは when に設定し、 ではメール ビューを表示するときに に設定します。viewWillAppearNOviewWillDisappear

次に、すべてのスクロール ロジックを if ブロックに入れます。

if(careAboutKeyboard) {
    // Scrolling logic
}
于 2009-11-13T16:22:58.257 に答える