2013-08-15 9 views
15

Wiem, jak skonfigurować obserwatora NSNotification, aby wykrywać, kiedy klawiatura pokazuje/ukrywa. Z tego mogę uzyskać wysokość klawiatury. Ale co się stanie, jeśli urządzenie zostanie obrócone, gdy klawiatura nadal będzie się wyświetlać?Jak uzyskać wysokość klawiatury BEZ polegania na powiadomieniach

Czy istnieje sposób na podniesienie wysokości klawiatury w tym nowym stanie? Ponieważ klawiatura wciąż pokazuje nowe powiadomienie, nie zostanie uruchomione.

Odpowiedz

13

Nadal musisz używać NSNotificationCenter, ale musisz obserwować inny klucz. Klucz, którego szukasz, to UIKeyboardDidChangeFrameNotification, który zgodnie z dokumentami jest wysyłany natychmiast po zmianie w klatce klawiatury.

+1

Dzięki! To ma sens. Wywoływane jest po powiadomieniu KeyboardDidShow _i_ KeyboardDidHide. –

5

Na iOS 6+, jeśli już zarejestrowany aby otrzymać UIKeyboardDidShowNotification Twój selektor zostanie wywołana ponownie wywołany gdy zmiany orientacji.

To jest powiadomienie, że Apple wykorzystuje w ich przykładowy kod dla Managing the Keyboard jednak podczas korzystania z tego powiadomienia, ich kalkulacja jest źle obliczając wysokość klawiatury w trybie poziomym:

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

Wymień wyżej z tym :

// Works in both portrait and landscape mode 
CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 
kbRect = [self.view convertRect:kbRect toView:nil]; 

CGSize kbSize = kbRect.size; 
+0

'UIKeyboardDidShowNotification' nie zostanie wywołany przy obrocie, jeśli klawiatura jest już pokazana. – memmons

+0

Mogę potwierdzić, że 'UIKeyboardDidShowNotification' nie jest wywoływany podczas obracania urządzenia, dlatego musiałem opublikować to pytanie. –

+0

@SteveBarden, widocznie dotyczy to tylko iOS 6+. Zaktualizowałem swoją odpowiedź. –