2010-07-18 10 views
8

Ho un'app di navigazione drill down con tre livelli di UIViewControllers. In ogni controller di visualizzazione, ho un UITextField in cui sto provando a sottoclasse UIKeyboard per ciascuno. La mia domanda è dove "impostare" le notifiche e "annullarle".Best practice per le notifiche UIKeyboard - iPhone SDK

ho le notifiche:

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

quindi è meglio per metterli in caso viewDidLoad? Oppure l'evento viewWillAppear?

E allo stesso modo per [[NSNotificationCenter defaultCenter] removeObserver:self];

non voglio avere più keyboardWillShow: eventi di essere chiamato come ho drill-down.

Molte grazie, Brett

risposta

7

io suggerisco di mettere questi nei metodi init e dealloc, come il viewWillAppear e viewWillDisappear saranno chiamati ogni volta che la vista appare o scompare, cui non è necessaria la registrazione/annullamento della registrazione notifiche.

+0

viewDidUnload: deprecato in iOS 6.0. Le viste non vengono più eliminate in condizioni di memoria insufficiente e quindi questo metodo non viene mai chiamato. – Vamos

+0

Registrarsi in init, annullare la registrazione in dealloc – jjxtra

+0

dipende da quando si vuole ottenere cosa – drct

5

avrei comunque suggerisco si registra come osservatore viewWillAppear e annullare la registrazione in viewWillDisappear dal viewDidUnload viene chiamato solo quando la memoria deve essere liberato, il che significa viewDidLoad ottenere chiamato molto più spesso di quanto viewDidUnload e allora si potrebbe avere il problema di ottenere il stessa notifica più di una volta.