2011-07-22 3 views
9

私はいくつかのUITextFields私のビュー(各UITableViewCellの中に)があります。キーボードがテキストフィールドのいずれかから起動されると、主にUITableViewのフレームを変更するためにいくつかのアニメーションを作成する必要があります。キーボードが隠れると同じことが起こるはずです。UIKeyboardWillShowNotification、UIKeyboardWillHideNotificationとNSNotificationCenterの間の問題iOSバージョン

私はアニメーションを行っていますので、ここで問題はありません。

は今、私はキーボードの/隠蔽を表示キャッチするNSNotificationCenterを使用:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil]; 

キーボードが表示されている(テキストフィールドが使用されている)、私は別のテキストフィールドの内部に押したときに問題があります。通常このキーボードの場合、キーボードは非表示にはなりませんが、表示されたままになります。

これはiOS 4でもうまくいきますが、問題は3.1.3(これはテストできるバージョンです - おそらく3.2より下のバージョン)です。 3.2より古いバージョンでは、テキストフィールドから別のテキストフィールドに直接フォーカスを変更すると、UIKeyboardWillHideNotificationおよびUIKeyboardWillShowNotificationが発生します。

NSNotificationCenterなしでキーボードが実際に表示/非表示になるときに、誰かが何らかのアニメーションを行う方法を知っていますか?

または3.2より低いバージョンでこの問題をどのように解決できますか?

ありがとうございました。

+1

考慮事項:ほぼすべての人がiOS 4にアップグレードしたことがあります。また、アプリをダウンロードしたり更新したりすることはほとんどありません。 1つの方法は、新しいバージョンのiOS 4のみをサポートする方法に切り替えることです。あなたのアプリが銀行向けアプリで重要な価値を持つものである場合、またはそうする特別な必要性がある場合は、両方をサポートするだけで構いません。 –

+0

@Peter:あなたに同意してください。アプリケーションがほぼ完了しただけです。この小さな問題はiOS4デバイスだけをサポートする本当の理由ではありません。 – CristiC

答えて

12

あなたはこれらの2つの方法あなたが

ような何かを行うことができます UIKeyboardWillHideNotification通知によってトリガーのgetあなたの方法でその後
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    _keyboardWillHide = NO; 
    return YES; 
} 

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    _keyboardWillHide = NO; 
    return YES;  
} 

を現在のビューコントローラにテキストフィールドの/のTextViewのデリゲートを設定し、実装されて行うことができます
if (_keyboardWillHide) { 
    // No other textfield/textview was selected so you can animate the tableView 
    ... 
} 
_keyBoardWillHide = YES; 

これが機能するかどうかを教えてください。

+0

の急速な呼び出しで呼び出されると仮定します。ありがとう、私は今夜それを試し、あなたに戻ってきます。 – CristiC

+0

これはうまくいきましたが、小さな変更がありました:あなたの答えでは_keyBoardWillHide = YES; UIKeyboardWillHideNotificationにありました。どこでも私は[UITextField resignFirstResponder]を持っていました。 – CristiC

+0

これらの2つのメソッドは同じです... – shim

2

NSTimerを0.1秒間設定してアニメーションを1つにすることができます。また、もう一度、UIKeyboardWillHideとUIKeyboardWillShowを同時に取得すると、タイマーをキャンセルすることができます。タイマーをキャンセルするチャンス。両方を取得しないと、タイマーはゼロになり、アニメーションが実行されます。

+0

これは良いアイデアです。しかし、UIKeyboardのアニメーションと自分のアニメーションとの間に小さなギャップ(遅延)が生じるので、できません。 – CristiC

+0

通知は常に予測可能な順序で起動しますか? –

+0

はい。最初にhideとショー。 – CristiC

1

UITextFieldDelegateプロトコルの使用を検討してください。方法textFieldShouldBeginEditing:は通知の前に発火し、テキストフィールドに入るたびに消えます。

関連する問題