2010-07-24 14 views

Respuesta

20

Sí. Hemos hecho esto en algunas de nuestras aplicaciones cuando el usuario tiene un "teclado" de escáner Bluetooth emparejado con el dispositivo. Lo que puede hacer es asegurarse de que textField tenga inputAccessoryView y forzar el frame de inputAccessoryView. Esto hará que el teclado se muestre en la pantalla.

Nos añaden los siguientes dos funciones en nuestro AppDelegate. la variable 'inputAccessoryView' es un UIView * hemos declarado en nuestro delegado de la aplicación:

//This function responds to all textFieldBegan editing 
// we need to add an accessory view and use that to force the keyboards frame 
// this way the keyboard appears when the scanner is attached 
-(void) textFieldBegan: (NSNotification *) theNotification 
{ 
    UITextField *theTextField = [theNotification object]; 
    // NSLog(@"textFieldBegan: %@", theTextField); 

    if (!inputAccessoryView) { 
     inputAccessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, navigationController.view.frame.size.width, 1)]; 
    } 

    theTextField.inputAccessoryView = inputAccessoryView; 

    [self performSelector:@selector(forceKeyboard) withObject:nil afterDelay:0]; 
} 

//Change the inputAccessoryView frame - this is correct for portrait, use a different 
// frame for landscape 
-(void) forceKeyboard 
{ 
    inputAccessoryView.superview.frame = CGRectMake(0, 759, 768, 265); 
} 

Luego, en nuestra applicationDidFinishLaunching añadimos este observador notificación, de modo que se pueden conseguir un evento cada vez que un campo de texto comenzó a editar

//Setup the textFieldNotifications 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldBegan:) name:UITextFieldTextDidBeginEditingNotification object:nil]; 

Espero que ayude!

+0

Hola Brian, en primer lugar muchas gracias para su solución. Desafortunadamente, me encontré con el problema de la congelación del teclado o la falla de toda la aplicación después de llamar al teclado un par de veces. ¿Tuviste el mismo problema, o mejor aún, una solución? :-) Gracias – Julian

+0

No, no hemos visto que eso suceda en absoluto. Hemos utilizado este código en docenas de aplicaciones que han tenido un amplio uso de la feria, y hasta ahora nadie ha mencionado ese tipo de problema. –

+0

A pesar de mis mejores esfuerzos, me encontré con el mismo problema: debe haber cierta interdependencia con algún otro código mío, ya que el código funcionaba perfectamente en una aplicación diferente. Nuevamente, ¡gracias por tu esfuerzo! – Julian

0

Como tengo el mismo problema, la solución más cercana que he encontrado es usar la aplicación de Erica Sadun llamada KeysPlease que está disponible a través de Cydia y Modmyi. Su descripción es "Usar soft kb incluso cuando está conectado a BT kb".

Además, he encontrado que si tiene un teclado físico también conectado, en mi caso a través del teclado del iPad, puede abrir el teclado con una tecla que parece corresponderse con la tecla de expulsión de un teclado bluetooth. Tal vez hay una forma de inyectar esta tecla como si estuviera presionada en un teclado conectado?

Me gustaría que hubiera una solución más oficial de codificación a esto.

1

No hay manera de hacer esto con el SDK actual. Por favor, avísele a Apple a través del the Bug Reporter.

0

Cuando mi aplicación conecta el dispositivo bluetooth, el teclado no se muestra. Intento establecer forzar el marco de la entrada AccessView como dice Brian Robbins. No funcionó.

Entonces yo uso una forma estúpida de solve.I encontrado al hacer clic en el campo de texto o Textview una vez más, el teclado mostrará. Así que solo necesito simular el toque en el campo de texto o en la vista de texto una vez, funciona.

Si usted quiere hacer un cierto tacto simular, mira esto. https://github.com/HUYU2048/PTFakeTouch

Cuestiones relacionadas