Verifique el keyboard dividido

Como muchos de ustedes saben, iOS 5 introdujo un keyboard dividido y pulido para escribir con el pulgar. Desafortunadamente, tengo una interfaz de usuario que depende de la distribución normal del keyboard a pantalla completa. Uno de mis controlleres de vista presenta al usuario una hoja de input de text, y si hacen clic en un campo de text que sería cubierto por el keyboard, se desliza junto con el keyboard. Esta acción es innecesaria con el keyboard dividido.

¿Hay alguna manera de verificar qué layout de keyboard está en uso antes de que aparezca?

¡Gracias!

Cuando el keyboard esté acoplado, se UIKeyboardWillShowNotification . Si el keyboard está dividido o desacoplado, no se generan notifications de keyboard.

Si un keyboard está acoplado, se UIKeyboardWillShowNotification , y lo siguiente será verdadero:

 [[[notification userInfo] valueForKey:@"UIKeyboardFrameChangedByUserInteraction"] intValue] == 1 

Si se desacopla un keyboard, se UIKeyboardWillHideNotification , y la statement anterior también será verdadera.

El uso de esta información ha sido adecuado para que yo pueda codificar mi interfaz de usuario.

Nota: esto podría ser una violación de las pautas de Apple, no estoy seguro.

Esta es la solución que funciona con keyboards divididos iPad (originalmente del blog vinculado en el comentario de Zeeshan)

 [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardDidChangeFrameNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * notification) { CGRect keyboardEndFrame = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect screenRect = [[UIScreen mainScreen] bounds]; if (CGRectIntersectsRect(keyboardEndFrame, screenRect)) { // Keyboard is visible } else { // Keyboard is hidden } }]; 

UIKeyboardFrameChangedByUserInteraction key UIKeyboardFrameChangedByUserInteraction no devuelve 1 todo el time cuando el keyboard se divide.

A continuación se muestran los valores de key del dictionary de información de usuario completa en UIKeyboardDidShowNotification / UIKeyboardDidHideNotification .

 2012-07-11 11:52:44.701 Project[3856:707] keyboardDidShow: { UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}"; UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 944}"; UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 592}"; UIKeyboardFrameBeginUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}"; UIKeyboardFrameChangedByUserInteraction = 0; UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}"; } 2012-07-11 11:52:45.675 Project[3856:707] keyboardDidHide: { UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}"; UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 592}"; UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 944}"; UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}"; UIKeyboardFrameChangedByUserInteraction = 0; UIKeyboardFrameEndUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}"; } 

En su lugar, puede usar las keys UIKeyboardCenterBeginUserInfoKey o UIKeyboardCenterEndUserInfoKey para recibir una notificación cuando se divide el keyboard.

¡Espero que esto ayude!

Las notifications que se publican cuando el keyboard aparece o cambia de position ( UIKeyboardWillShowNotification , UIKeyboardWillChangeFrameNotification ) contienen un dictionary de información de userInfo con el marco del keyboard ( UIKeyboardFrameEndUserInfoKey ) que le permite UIKeyboardFrameEndUserInfoKey correctamente los elementos de la interfaz de usuario, dependiendo del tamaño real y la location del keyboard.