2010-07-18 40 views
8

我有一個向下鑽取的導航應用程序,具有三個級別的UIViewControllers。 在每個視圖控制器中,我有一個UITextField,我試圖爲每個UIKeyboard子類。我的問題是在哪裏「設置」通知並「取消」它們。UIKeyboard通知的最佳實踐 - iPhone SDK

我有通知:

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

所以最好還是將它們設置在viewDidLoad中的事件嗎?或viewWillAppear事件?

27:11 [[NSNotificationCenter defaultCenter] removeObserver:self];

我不想有多個keyboardWillShow:事件被稱爲我深入。

非常感謝, 佈雷特

回答

7

我建議你把這些在initdealloc方法,作爲viewWillAppearviewWillDisappear都會被調用視圖出現或消失時間,這是不必要的註冊/註銷通知。

+0

viewDidUnload:在iOS 6.0中不贊成使用。視圖不再在低內存條件下清除,因此此方法從不被調用。 – Vamos 2013-01-22 10:58:58

+0

在init中註冊,在dealloc中取消註冊 – jjxtra 2013-02-04 17:20:23

+0

取決於您何時想實現什麼 – drct 2013-02-18 11:30:16

5

我還是建議你在viewWillAppear註冊爲觀察員,並在自viewDidUnloadviewWillDisappear註銷被稱爲只有當內存已被釋放,這意味着viewDidLoad被調用比viewDidUnload往往更多,然後你可能得到的問題相同的通知不止一次。