0

我正在處理嵌入的表格視圖。當鍵盤隱藏一些文本框時,它們應該向上滾動。但是,我的導航視圖控制器中有幾個視圖控制器具有此行爲。到目前爲止,我的代碼註冊和註銷的代碼是:iOS:每當視圖消失時,是否需要從鍵盤事件中取消註冊導航控制器?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self registerForKeyboardNotifications]; 
} 

// Call this method somewhere in your view controller setup code. 
- (void)registerForKeyboardNotifications 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWasShown:) 
               name:UIKeyboardDidShowNotification object:nil]; 

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

} 

- (void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

但是如果我表示假設視圖控制器3號在我的導航控制器的鍵盤,該keyboardWasShown方法被稱爲三次。這沒有關係,或者我需要註銷每次viewWillDisappear?

回答

1

您應該將[self registerForKeyboardNotifications];移動到viewDidAppear並取消註冊viewDidDisappear

通過在viewDidLoad中註冊並取消註冊dealloc,特別是在導航控制器中,通知將針對導航堆棧中的每個視圖控制器觸發一次。你只需要爲當前可見的視圖調用它。

或者,您可以繼承導航控制器,並讓它在其當前可見的控制器上調用方法。那麼你不必做所有這些註冊和註銷。只需在導航控制器子類中註冊一次,並讓該類將消息傳遞給正確的視圖控制器。

+0

好吧,這不是任何性能問題或任何?我很抱歉對iOS還是新的:-) – MichiZH

+0

我更新了我的答案。我會讓導航控制器處理通知。在每個視圖控制器中註冊和取消註冊可能會對性能產生很小的影響......但並不像多個視圖控制器都只在其中一個視圖控制器需要時才響應通知。 – nhgrif

+0

嗯,我其實並不真正瞭解如何在導航控制器中編寫代碼?我的意思是我知道子類和所有東西,但是你怎麼稱呼這個方法,或者你將如何編程? – MichiZH

相關問題