UIKeyboardWillShowNotification неправильно вызвано из следующего класса в стеке - PullRequest
5 голосов
/ 17 июня 2011

Я определяю, когда клавиатура будет отображаться с приведенным ниже кодом. Однако, когда я нажимаю на другой экран с помощью pushViewController и открываю клавиатуру на этом экране, клавиатураWillShow вызывается! Это действительно правильно?

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];
// register for keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification 
                                           object:nil];

1 Ответ

15 голосов
/ 17 июня 2011

Да, это правильное поведение.Так как представление, которое выдвигает другое представление, все еще живо, и уведомления распространяются на приложение.

Вы можете удалить уведомление в:

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UIKeyboardWillShowNotification 
                                                  object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UIKeyboardWillHideNotification 
                                                  object:nil];
}

И если вы хотите установить наблюдателя, тогдапоместите свой код из viewDidLoad в viewWillAppear: (BOOL) анимированный:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];
    // register for keyboard notifications
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification 
                                           object:nil];
}
...