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

Я обновил свой ответ. Я бы позволил контроллеру nav обрабатывать уведомления. Регистрация и отмена регистрации в каждом контроллере представления может очень сильно повлиять на производительность ... но не столько, сколько наличие нескольких контроллеров представления, которые реагируют на уведомление, когда требуется только один из них. – nhgrif

+0

Хм, я действительно не понимаю, как бы это сделать в контроллере навигации? Я имею в виду, что я знаю подклассы и все, но как бы вы назвали этот метод тогда или как бы вы его программировали? – MichiZH

 Смежные вопросы

  • Нет связанных вопросов^_^