2011-11-10 63 views
9

我有鍵盤通知的觀點,如keyboardWillShowkeyboardWillHidekeyboardWillShow叫了兩聲

所有的代碼與我使用的是來自蘋果的示例代碼"KeyboardAccessory"

當我第一次進入這個觀點,一切都採取了通知處理工作正常。

但是當我回到其子視圖這個觀點,我每次點擊一個按鈕,上面寫着:

[myTextField becomeFirstResponder]; 

keyboardWillShowkeyboardWillHide方法都需要進行兩次,每次調用。

這真的很讓人困惑,

任何人都可以幫助我嗎?

真的很感謝!

回答

11

您可能想要發佈您的代碼。

如果您的方法被調用兩次,很可能您多次註冊鍵盤通知,並且在您認爲自己的時候沒有刪除觀察者。

在viewWillAppear中添加您的觀察者:並在viewWillDisappear中將其刪除:並查看會發生什麼。

+0

謝謝!我突然知道問題在哪裏! –

+0

但是告訴我們您的問題的解決方案呢?聽起來像是從視圖控制器中移除觀察者的東西 –

+0

在我的情況下,我確實已經將觀察者添加了兩次。謝謝〜 – James

6

當自定義鍵盤(如SwiftKey)正在顯示時,它會在iOS 8上調用兩次。

在第一次通話時,它可能準備顯示,所以CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;將有keybaord高度爲0

第二個調用將具有正確的鍵盤高度,因此如果您需要調整內容插入,您可以在計算您的插入之前檢查返回鍵盤的高度是否大於0。

此外,只要用戶更改鍵盤,它就會被調用。

+3

我得到這與完全相同的通知(對象地址是相等的),並且高度也是相等的... :-(另外,我只在viewDidLoad中添加一次觀察者 –

3

對我而言,更改inputAccessoryView會觸發另一個電話keyboardWillShow,因爲輸入附件視圖的高度會影響整體鍵盤高度。