Ich muss den Zustand der Tastatursichtbarkeit in meiner iOS-App überprüfen.
Pseudocode:
if(keyboardIsPresentOnWindow) {
//Do action 1
}
else if (keyboardIsNotPresentOnWindow) {
//Do action 2
}
Wie kann ich diesen Zustand überprüfen?
ios
objective-c
keyboard
Jitendra Singh
quelle
quelle
Antworten:
… Oder nehmen Sie den einfachen Weg:
Wenn Sie ein Textfeld eingeben, wird es zum Ersthelfer und die Tastatur wird angezeigt. Sie können den Status der Tastatur mit überprüfen
[myTextField isFirstResponder]
. Wenn es zurückkehrtYES
, ist die Tastatur aktiv.quelle
Der Code von drawonward ist sehr eng, kollidiert jedoch mit dem UIKit-Namespace und könnte einfacher zu verwenden sein.
quelle
+load
ist eine spezielle Methode, die von der Objective-C-Laufzeit aufgerufen wird. Es wird für jede Klasse aufgerufen, nachdem die App-Binärdatei geladen wurde, aber bevor diemain()
Funktion eingegeben wird. Es gibt keine Garantie dafür, dass ein Autorelease-Pool aktiv ist.NSAutoreleasePool
alloc
/release
kann nun durch rund um den Code in ersetzt werden@autoreleasepool { }
Erstellen Sie eine,
UIKeyboardListener
wenn Sie wissen, dass die Tastatur nicht sichtbar ist, z. B. durch Aufrufen[UIKeyboardListener shared]
vonapplicationDidFinishLaunching
.quelle
+(void)load
init für diese Listener-Klasse aufrufen, damit sie generisch als Drag-and-Drop in jedes Projekt funktioniert und vom zweiten App-Start an initialisiert wird, anstatt dass Sie daran denken müssen, sie irgendwo zu initiieren.Ich denke, Sie müssen die Benachrichtigungen verwenden, die über die Tastatur bereitgestellt werden:
Von: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITextField_Class/Reference/UITextField.html
quelle
Swift 3-Implementierung
quelle
Die Verwendung der Fenster-Unteransichtshierarchie als Anzeige für die Tastaturanzeige ist ein Hack. Wenn Apple die zugrunde liegende Implementierung ändert, werden alle diese Antworten unterbrochen.
Der richtige Weg wäre, das Ein- und Ausblenden von Benachrichtigungen auf der Tastatur zu überwachen, z. B. in Ihrem App-Delegaten:
In AppDelegate.h:
In AppDelegate.m:
Dann können Sie überprüfen mit:
Es ist zu beachten, dass die Benachrichtigungen zum Ein- und Ausblenden der Tastatur nicht ausgelöst werden, wenn der Benutzer eine Bluetooth- oder externe Tastatur verwendet.
quelle
Fügen Sie eine Erweiterung hinzu
Überprüfen Sie dann, ob die Tastatur vorhanden ist.
quelle
guard let keyboardWindowClass = NSClassFromString("UIRemoteKeyboardWindow") else { return false }; return UIApplication.shared.windows.contains(where: { $0.isKind(of: keyboardWindowClass) })
Dies stammt aus dem von Apple hier veröffentlichten iOS-Textprogrammierungshandbuch: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html
Rufen Sie grundsätzlich "registerForKeyBoardNotifications" in Ihrem ViewDidLoad auf. Jedes Mal, wenn die Tastatur aktiv wird, wird "keyboardWasShown" aufgerufen. Und jedes Mal, wenn die Tastatur verschwindet, wird "keyboardWillBeHidden" aufgerufen.
quelle
In iOS8 funktioniert diese Lösung natürlich nicht. Es wurde ursprünglich für IOS4 / 5 geschrieben.
Versuchen Sie diese Lösung:
quelle
Einige Beobachtungen:
Das empfohlene Muster für ein Singleton-Objekt lautet wie folgt. dispatch_once stellt sicher, dass die Klasse einmal threadsicher initialisiert wird und die statische Variable außerhalb nicht sichtbar ist. Da es sich um eine Standard-GCD handelt, müssen Sie keine Details zu Objective-C auf niedriger Ebene kennen.
Normalerweise möchten Sie nicht wissen, ob die Tastatur sichtbar ist oder nicht, sondern wie groß sie ist. Tastaturen haben nicht alle die gleiche Größe. iPhone-Tastaturen sind kleiner als iPad-Tastaturen. Sie möchten also eine andere Eigenschaft,
@property (readonly, nonatomic) CGRect keyboardRect;
die in der noteShowKeyboard: -Methode wie folgt festgelegt ist:Es ist wichtig zu beachten, dass sich das Rechteck in UIWindow-Koordinaten befindet und die Bildschirmdrehung nicht berücksichtigt. Der Anrufer würde dieses Rechteck also durch Aufrufen konvertieren
Wenn der Benutzer den Bildschirm dreht, während die Tastatur sichtbar ist, wird der App mitgeteilt, dass die Tastatur ausgeblendet und dann erneut angezeigt wird. Wenn es angezeigt wird, werden andere Ansichten höchstwahrscheinlich noch nicht gedreht. Wenn Sie also selbst Ereignisse zum Ausblenden / Anzeigen der Tastatur beobachten, konvertieren Sie die Koordinaten, wenn Sie sie tatsächlich benötigen, nicht in der Benachrichtigung.
Wenn der Benutzer die Tastatur teilt oder abdockt oder eine Hardwaretastatur verwendet, wird die Tastatur in den Benachrichtigungen immer als ausgeblendet angezeigt. Wenn Sie die Tastatur abdocken oder zusammenführen, wird eine Benachrichtigung "Tastatur angezeigt" gesendet.
Der Listener muss initialisiert werden, während die Tastatur ausgeblendet ist. Andernfalls wird die erste Benachrichtigung übersehen und es wird davon ausgegangen, dass die Tastatur ausgeblendet ist, wenn dies nicht der Fall ist.
Es ist also sehr wichtig zu wissen, was Sie tatsächlich wollen. Dieser Code ist nützlich, um Dinge aus dem Weg zu räumen (bei einer geteilten oder nicht angedockten Tastatur liegt dies in der Verantwortung des Benutzers). Es sagt Ihnen nicht, ob der Benutzer eine Tastatur auf dem Bildschirm sehen kann (im Fall einer geteilten Tastatur). Es sagt Ihnen nicht, ob der Benutzer tippen kann (zum Beispiel, wenn eine Hardwaretastatur vorhanden ist). Das Betrachten anderer Fenster funktioniert nicht, wenn die App andere Fenster selbst erstellt.
quelle
Schnelle Implementierung:
Da swift nicht Klasse ausführen Last Methode beim Start ist es wichtig , diesen Dienst auf App - Start zu starten:
quelle
Dies ist meine Lösung, sie kapselt alles in einer einzigen statischen Methode, und Sie können sie überall aufrufen, um Folgendes zu überprüfen:
quelle
Und so geht's in Swift:
Vergessen Sie nicht, die Registrierung aufzuheben:
Und wenn Sie die Tastatur beim Drücken der "Return" -Taste schließen möchten:
quelle
Probieren Sie diese Funktion aus
}}
von: iOS: Wie greife ich auf das UIKeyboard zu?
quelle
BOOL isTxtOpen = [txtfieldObjct isFirstReponder]. Wenn JA zurückgegeben wird, ist die Tastatur aktiv.
quelle
Um zu überprüfen, ob die Wettertastatur angezeigt wird, können Sie die vordefinierten Tastaturbenachrichtigungen verwenden.
UIKeyboardDidShowNotification, UIKeyboardDidHideNotification
Zum Beispiel kann ich den folgenden Code verwenden, um die Tastaturbenachrichtigung abzuhören
// Achten Sie auf das Erscheinen und Verschwinden der Tastatur
In den Methoden kann ich Benachrichtigungen erhalten
quelle
Swift 4
quelle
Sie können alle Textansichten, Textfelder und Beschriftungen in den Unteransichten einer übergeordneten Ansicht iterativ überprüfen, um festzustellen, ob es sich bei den ersten um Antworten handelt.
quelle
SWIFT 4.2 / SWIFT 5
quelle
Ich denke, das kann dir helfen,
Vielen Dank,
Naveen Shan
quelle