2011-07-22 65 views
9

我有我的看法幾個UITextFields(每一個UITableViewCell內)。當從任何文本字段觸發鍵盤時,我需要製作一些動畫,主要是爲了更改UITableView的框架。當鍵盤隱藏時也必須發生這種情況。UIKeyboardWillShowNotification,UIKeyboardWillHideNotification和NSNotificationCenter問題

我也做了動畫,所以在這裏這不是問題。

現在,我用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以及那些不是很少下載或更新應用程序的人。另一種選擇是切換到僅支持iOS 4的新版本。如果你的應用程序對銀行應用程序來說很重要,或者你有一些非常特殊的需要,那麼只需要支持它們。 –

+0

@彼得:同意你的看法。只是應用程序差不多完成了。這個小問題並不是我僅支持iOS4設備的真正原因。 – CristiC

回答

12

你可以做的是設置文本框的/ TextView中的委託到當前視圖控制器和執行這2種方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    _keyboardWillHide = NO; 
    return YES; 
} 

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

之後,在你的方法得到年代由UIKeyboardWillHideNotification通知你可以這樣做

觸發
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

這兩種方法是一樣的...... – shim

2

而不是避免了通知,你可以設置一個NSTimer 0.1秒做你的動畫於一體,而在另一方面,取消計時器,這樣如果你UIKeyboardWillHide和UIKeyboardWillShow兩者兼而有之,你會得到有機會取消定時器。如果你沒有得到兩個,計時器將達到零,動畫將被執行。

+0

這是個好主意。但不能完成,因爲這會在UIKeyboard的動畫和我自己的動畫之間產生一個小的間隙(延遲)。 – CristiC

+0

通知是否始終以可預測的順序啓動? –

+0

是的。首先隱藏和展示。 – CristiC

1

考慮使用UITextFieldDelegate協議。方法textFieldShouldBeginEditing:將在通知之前觸發,並且每次進入文本字段時都會觸發。

相關問題