2012-04-04 8 views
5

Duplicar posible:
How can I detect if an external keyboard is present on an iPad?¿Cómo sé si hay un teclado de hardware?

Cuando un usuario comienza a editar un campo de texto en mi interfaz de usuario de aplicación para el iPhone, quiero usar el espacio entre el campo de texto y el teclado para obtener una lista de los relacionados opciones.

Usando el teclado normal (en pantalla) de iOS, hay un par de convenient notifications para escuchar, que me ayudan a decidir cuánto espacio me queda para la lista.

Sin embargo, cuando adjunta (o simula el uso de) un teclado de hardware, estas notificaciones ya no se publican. No demasiado inesperado, pero esto me deja un poco desafiante. Si el usuario usa el teclado de hardware, tengo más espacio para la lista.

Pero, ¿cómo puedo determinar si el usuario tiene un teclado de hardware o no, si no hay una notificación activada o un método delegado para escuchar? ¿O está ahí?

Lo que también se debe tener en cuenta es que un usuario puede primero usar la aplicación con el teclado del software y luego conectar su teclado de hardware y continuar trabajando con la aplicación. En ese punto, el teclado del software se ocultará, pero el usuario todavía está editando el campo de texto.

encontré una víctima de edad para esta pregunta, pero es sin respuesta:

Respuesta

3

entrada vistas accesorios se muestran en la parte inferior de la pantalla si hay un teclado de hardware conectado (de lo contrario están unidos a la parte superior del teclado en pantalla).

Establezca la vista de accesorios de su vista de entrada en un UIView vacío del tamaño CGRectZero. Recibirá las notificaciones show/hide para ambos casos y podrá determinar el tamaño de pantalla disponible en el metrics in the notification's userinfo dictionary.

UIView *inputAccessoryView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
inputAccessoryView.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
textView.inputAccessoryView = inputAccessoryView; 

… 

- (void)keyboardWillShow:(NSNotification*)aNotification { 
    NSLog(@"%@", [aNotification userInfo]); 
} 

métricas Enregistre - tenga en cuenta el marco en UIKeyboardFrameEndUserInfoKey es fuera de la pantalla

// (NSDictionary *) { 
//  UIKeyboardAnimationCurveUserInfoKey = 0; 
//  UIKeyboardAnimationDurationUserInfoKey = "0.25"; 
//  UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 264}}"; 
//  UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 891}"; 
//  UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 1155}"; 
//  UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 758}, {768, 264}}"; 
//  UIKeyboardFrameChangedByUserInteraction = 0; 
//  UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 1022}, {768, 264}}"; 
// } 

Actualización - muy similar a user721239's answer en la pregunta relacionada.

+0

Buen truco, casi una tontería de la otra pregunta, pero eso no apareció en mis búsquedas. ¡Gracias! – epologee

Cuestiones relacionadas