2010-07-24 8 views
20

Meine iPad-App verwendet ein externes "Gerät", das als Hardware-Tastatur fungiert. Aber irgendwann in den Einstellungen muss ich Text eingeben und ich kann das "Gerät" nicht verwenden ("Gerät" ist keine Tastatur). Also, gibt es eine Möglichkeit, Pop die Soft-Tastatur zu zwingen, auch wenn ich eine Hardware-Tastatur angeschlossen habe?iPhone-Softtastatur anzeigen, obwohl eine Hardwaretastatur angeschlossen ist

Antwort

20

Ja. Wir haben dies in einigen unserer Apps getan, wenn der Benutzer eine mit dem Gerät gekoppelte Bluetooth-Tastatur hat. Sie können sicherstellen, dass Ihr textField über eine inputAccessoryView verfügt und dann den Frame von inputAccessoryView selbst erzwingen. Dadurch wird die Tastatur auf dem Bildschirm angezeigt.

Wir haben die folgenden zwei Funktionen zu unserem AppDelegate hinzugefügt. Die ‚inputAccessoryView‘ Variable ist ein UIView * in unserem AppDelegate erklärt haben:

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

Dann in unserem applicationDidFinishLaunching fügten wir diese Benachrichtigung Beobachter, so dass wir eine Veranstaltung jederzeit ein Textfeld

//Setup the textFieldNotifications 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldBegan:) name:UITextFieldTextDidBeginEditingNotification object:nil]; 
begann Bearbeitung erhalten würde

Hoffe, dass hilft!

+0

Hallo Brian, zuerst einmal vielen Dank für Ihre Lösung. Leider bin ich auf das Problem des Einfrierens der Tastatur oder der ganzen App gestoßen, nachdem ich die Tastatur einige Male angerufen habe. Hattest du das gleiche Problem oder besser noch eine Lösung? :-) Danke – Julian

+0

Nein, das haben wir überhaupt nicht gesehen. Wir haben diesen Code in Dutzenden von Apps verwendet, die bereits umfangreiche Messenutzung hatten, und bisher hat niemand diese Art von Problem erwähnt. –

+0

Trotz meiner besten Bemühungen bin ich immer wieder auf dasselbe Problem gestoßen - muss mit einem anderen Code von mir interagieren, da der Code in einer anderen App perfekt funktioniert. Nochmals vielen Dank für Ihre Mühe! – Julian

0

Da ich das gleiche Problem haben, ist die nächste Lösung, die ich gefunden habe, ist Erica Sadun App KeysPlease genannt zu verwenden, die über Cydia und modmyi zur Verfügung steht. Es ist die Beschreibung ist "Verwenden Sie Soft-kb, auch wenn mit einem BT kb verbunden ist.".

Zusätzlich habe ich festgestellt, dass, wenn Sie eine physische Tastatur auch angeschlossen haben, in meinem Fall über die iPad-Tastatur doc, können Sie die Tastatur mit einem Schlüssel, der die Auswurf-Taste auf einer Bluetooth-Tastatur zuordnen scheint. Vielleicht gibt es eine Möglichkeit, diesen Schlüssel zu injizieren, als wäre er auf einer angeschlossenen Tastatur gedrückt worden?

Ich wünschte wirklich, dass es eine offizielle Kodierungslösung zu diesem gab.

1

Es gibt keine Möglichkeit, dies mit dem aktuellen SDK zu tun. Bitte informieren Sie Apple über the Bug Reporter.

0

Wenn meine App Bluetooth-Gerät verbinden, würde Tastatur nicht angezeigt werden. Ich versuche, den Rahmen der inputAccessoryView zwingen, wie Brian Robbins sagen. Es hat nicht funktioniert.

Dann benutze ich einen dummen Weg zu lösen.Ich habe gefunden, wenn ich Textfeld oder Textansicht noch einmal anklicke, wird Tastatur angezeigt. Also ich muss nur Touch in Textfield oder Textview simulieren, es funktioniert.

Wenn Sie eine Berührung simulieren möchten, überprüfen Sie dies. https://github.com/HUYU2048/PTFakeTouch

Verwandte Themen