2013-08-15 16 views
15

So come impostare un osservatore NSNotification per rilevare quando la tastiera mostra/nasconde. Da questo posso ottenere l'altezza della tastiera. Ma cosa succede se il dispositivo viene ruotato mentre la tastiera è ancora visualizzata?Come ottenere l'altezza della tastiera SENZA fare affidamento sulle notifiche

C'è un modo per ottenere l'altezza della tastiera in questo nuovo stato? Poiché la tastiera continua a mostrare una nuova notifica non verrà attivata.

risposta

13

È ancora necessario utilizzare NSNotificationCenter, ma è necessario osservare una chiave diversa. La chiave che stai cercando è UIKeyboardDidChangeFrameNotification che, secondo i documenti, viene pubblicata immediatamente dopo un cambiamento nel frame della tastiera.

+1

Grazie! Questo ha senso. Viene chiamato dopo la notifica KeyboardDidShow _and_ KeyboardDidHide. –

5

Su iOS 6+, se ti sei registrato per ricevere lo UIKeyboardDidShowNotification, il tuo selettore verrà chiamato nuovamente quando l'orientamento cambia.

Questa è la notifica che Apple utilizza nel proprio codice di esempio per Managing the Keyboard, tuttavia, quando si utilizza questa notifica, il loro calcolo è sbagliato quando si calcola l'altezza della tastiera in modalità orizzontale:

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

Sostituire quanto sopra con questo :

// 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' non verrà chiamato in rotazione se la tastiera è già visualizzata. – memmons

+0

Posso attestare che "UIKeyboardDidShowNotification" non viene chiamato alla rotazione del dispositivo, motivo per cui ho dovuto pubblicare questa domanda. –

+0

@SteveBarden, a quanto pare questo è vero solo su iOS 6+. Ho aggiornato la mia risposta. –

Problemi correlati