2015-06-21 2 views
1

С очень простого куском коды ниже, у меня есть разница странного поведения между прошивкой 7 и 8 при вращении:UIKeyboardWillShowNotification срабатывает два раза на прошивке 8 и только один раз на прошивке 7 при вращении

  • КСН 7 клавиатураWillShow и keyboardWillHide вызываются только один раз каждый.
  • На iOS 8 клавиатураWillShow и keyboardWillHide вызывается по два раза каждый.

Я создал очень простой проект, чтобы гарантировать, что это не является побочным эффектом моего основного проекта, но это не так.

Является ли это документированной разницей в поведении?

С уважением. Sébastien.

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:self.view.window]; 


    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillHide:) 
               name:UIKeyboardWillHideNotification 
               object:self.view.window]; 
} 

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

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void)keyboardWillShow:(NSNotification*)notification 
{ 
    NSLog(@"Keyboard will show."); 
} 

-(void)keyboardWillHide:(NSNotification*)notification 
{ 
    NSLog(@"Keyboard will hide."); 
} 

@end 
+0

Хотя это может быть внутренняя ошибка, вы должны стараться не заниматься реализацией системы клавиатуры, если уведомления являются логическими ('show' ->' hide' -> 'show' ->' hide', а не 'hide' ->' show' -> 'show' ->' hide'). Попробуйте проверить стек вызовов, чтобы увидеть логику публикации сообщения Apple. –

+0

Поместите 'NSNotificationCenter' в' viewDidLoad' и попробуйте. – VRAwesome

+0

Я согласен, но мое приложение должно работать на iOS 7 и iOS 8 (и 9), проблема в том, что часть кода работает правильно (когда устройство вращается) с уведомлением как одного, так и двух .... –

ответ

0

Себастьен Я думаю, вы должны добавить уведомление клавиатуры в viewDidLoad(), а затем попробуйте еще раз, надеюсь, что это поможет.

+0

Уже тестировалось, чтобы поставить в viewDidLoad, такое же поведение. –

+0

Вы можете использовать cancelPreviousSelector и после этого выполнить методSelector. –

+0

Вы имеете в виду добавить в KeyboardWillShow/KeyboardWillHide метода что-то вроде: [NSObject cancelPreviousPerformRequestsWithTarget: автономный селектора: @selector (keyboardWillHide :) объекта: ноль]; Такое же поведение. –