Mostra la tastiera virtuale di iPhone anche se è collegata una tastiera hardware

La mia app per iPad utilizza un “dispositivo” esterno che funge da tastiera hardware. Ma, ad un certo punto delle impostazioni, ho bisogno di inserire del testo e non posso usare il “dispositivo” (“dispositivo” non è una tastiera). Quindi, c’è un modo per forzare la tastiera virtuale, anche se ho pensato di avere una tastiera hardware collegata?

Sì. Lo abbiamo fatto in alcune delle nostre app per quando l’utente ha una “tastiera” scanner Bluetooth associata al dispositivo. Quello che puoi fare è assicurarti che il tuo textField abbia un inputAccessoryView e quindi forzare il frame di inputAccessoryView. Ciò farà sì che la tastiera venga visualizzata sullo schermo.

Abbiamo aggiunto le seguenti due funzioni al nostro AppDelegate. La variabile ‘inputAccessoryView’ è un UIView * che abbiamo dichiarato nel nostro delegato dell’app:

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

Poi nella nostra applicazioneDidFinishLaunching abbiamo aggiunto questo osservatore delle notifiche in modo da ottenere un evento ogni volta che un campo di testo ha iniziato a modificare

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

Spero possa aiutare!

Non c’è modo di farlo con l’attuale SDK. Per favore, informa Apple tramite Bug Reporter .

Poiché ho lo stesso problema, la soluzione più vicina che ho trovato è quella di utilizzare l’app di Erica Sadun chiamata KeysPlease, disponibile tramite cydia e modmyi. La sua descrizione è “Usa soft kb anche se connesso a un BT kb.”.

Inoltre ho scoperto che se hai una tastiera fisica anche collegata, nel mio caso tramite la tastiera iPad doc, puoi far apparire la tastiera usando una chiave che sembra mappare al tasto di espulsione su una tastiera bluetooth. Forse c’è un modo per iniettare questo tasto come se fosse stato premuto su una tastiera collegata?

Mi piacerebbe davvero che ci fosse una soluzione di codifica più ufficiale a questo.

Quando la mia app si collega al dispositivo bluetooth, la tastiera non mostrerebbe.Io provo a forzare il frame di inputAccessoryView come dice Brian Robbins. Non ha funzionato.

Quindi uso un modo stupido per risolvere. Ho trovato quando faccio clic su textfield o textview ancora una volta, la tastiera mostrerà. Quindi ho solo bisogno di simulare il touch in textfield o textview una volta, funziona.

Se vuoi fare un po ‘di simulazione, controlla questo. https://github.com/HUYU2048/PTFakeTouch