2012-04-04 7 views
1

今、キーボードが画面に表示されているときにフレームを上げる機能を記述しようとしています。 私はNSNNotificationCenterの使用を開始しました。私のコードは正しく機能していません。キーボードが表示されたら、私のformViewは動いていますが、私が次のtextViewをformViewで編集し始めると、formViewが再び上がっています。私のコードに何が問題なのですか?おかげさまで NSNotificationCenter

- (void)keyboardWillShow:(NSNotification *) aNotification { 
    NSDictionary *userInfo = [aNotification userInfo]; 

    CGRect frame = self.formView.frame; 
    frame.origin.y -= 170; 

    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    NSTimeInterval animationDuration; 

    [animationDurationValue getValue:&animationDuration]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:animationDuration]; 

    formView.frame = frame; 

    [UIView commitAnimations]; 

} 
+2

このコードでは170をハードコードしないでください。マニュアルを読むと、キーボードの実際のサイズをどのように得ることができるかがわかります。 iPad搭載のiOS 5では、キーボードを分割することができるため、フレームを調整しないでください。これは単なる一例です。絶対このようなハードコードのもの。 –

+0

ご意見ありがとうございます。 – nikigx2

答えて

1

キーボードが消えているとき、あなたはあなたのビューのorigin.yにもう一度170個のピクセル(または任意のマイクにより示唆されるように、あなたが計算)を追加する必要があります。別のテキストフィールドをクリックすると、技術的に現在のキーボードが消えてしまいます(ビューは反応しません)、新しいキーボードが表示されます(keyboardWillShowが再度呼び出され、ビューが170pxだけ上にシフトします)。

関連する問題