Mostrar o teclado virtual do iPhone mesmo que um teclado de hardware esteja conectado

Meu aplicativo para iPad usa um “dispositivo” externo que funciona como um teclado de hardware. Mas, em algum momento nas configurações, eu preciso inserir texto e não posso usar o “dispositivo” (“dispositivo” não é um teclado). Então, existe alguma maneira de forçar o teclado virtual a pensar que tenho um teclado de hardware conectado?

Sim. Fizemos isso em alguns de nossos aplicativos para quando o usuário tem um “teclado” de scanner Bluetooth emparelhado com o dispositivo. O que você pode fazer é garantir que seu textField tenha um inputAccessoryView e, em seguida, forçar o quadro do inputAccessoryView por conta própria. Isso fará com que o teclado seja exibido na canvas.

Adicionamos as duas funções a seguir ao nosso AppDelegate. A variável ‘inputAccessoryView’ é uma UIView * que declaramos em nosso delegado de aplicativo:

//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); } 

Em seguida, em nosso applicationDidFinishLaunching, adicionamos esse observador de notificação para que pudéssemos obter um evento sempre que um campo de texto fosse iniciado

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

Espero que ajude!

Não há como fazer isso com o SDK atual. Por favor, informe a Apple através do Bug Reporter .

Como tenho o mesmo problema, a solução mais próxima que encontrei é usar o aplicativo Erica Sadun, chamado KeysPlease, que está disponível via cydia e modmyi. Sua descrição é “Use soft kb mesmo quando conectado a um BT kb.”

Além disso, descobri que, se você tiver um teclado físico também anexado, no meu caso, através do doc do teclado do iPad, você pode abrir o teclado usando uma tecla que parece mapear a tecla de ejeção em um teclado bluetooth. Talvez haja uma maneira de injetar essa chave como se ela estivesse pressionada em um teclado conectado?

Eu realmente gostaria que houvesse uma solução de codificação mais oficial para isso.

Quando meu aplicativo conecta o dispositivo bluetooth, o teclado não é exibido. Tento configurar o quadro do inputAccessoryView como Brian Robbins diz. Não funcionou.

Então eu uso uma maneira estúpida para resolver.Eu encontrei quando eu clico textfield ou textview mais uma vez, o teclado irá mostrar. Então eu só preciso simular toque no campo de texto ou textview uma vez, funciona.

Se você quiser fazer algum toque simulado, verifique isso. https://github.com/HUYU2048/PTFakeTouch