Лучшая практика для уведомлений UIKeyboard — iPhone SDK

У меня есть приложение для навигации по детализации с тремя уровнями UIViewControllers. В каждом контроллере представления у меня есть UITextField, где я пытаюсь создать подкласс UIKeyboard для каждого. Мой вопрос заключается в том, где «установить» уведомления и «отключить» их.

У меня есть уведомления:

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

так что лучше всего установить их в событии viewDidLoad? Или событие viewWillAppear?

И так же для [[NSNotificationCenter defaultCenter] removeObserver:self];

Я не хочу, чтобы во время детализации вызывалось несколько событий keyboardWillShow:.

Большое спасибо, Бретт.


person Brett    schedule 18.07.2010    source источник


Ответы (2)


Я предлагаю вам поместить их в методы init и dealloc, так как viewWillAppear и viewWillDisappear будут вызываться каждый раз, когда представление появляется или исчезает, что не нужно для регистрации/отмены регистрации уведомлений.

person Jacob Relkin    schedule 18.07.2010
comment
viewDidUnload: устарело в iOS 6.0. Представления больше не очищаются при нехватке памяти, поэтому этот метод никогда не вызывается. - person Vamos; 22.01.2013
comment
Зарегистрируйтесь в init, отмените регистрацию в Dealloc - person jjxtra; 04.02.2013
comment
зависит от того, когда вы хотите достичь чего - person drct; 18.02.2013

Тем не менее, я бы посоветовал вам зарегистрироваться в качестве наблюдателя в viewWillAppear и отменить регистрацию в viewWillDisappear, так как viewDidUnload вызывается только тогда, когда необходимо освободить память, то есть viewDidLoad вызывается гораздо чаще, чем viewDidUnload, и тогда у вас может возникнуть проблема с получением одного и того же уведомления чаще, чем однажды.

person drct    schedule 30.01.2012