Programmgesteuert Fokus auf ein Formular in einem webview (WKWebView)
Es ist möglich, mit UIWebView mit folgenden:
[webView setKeyboardDisplayRequiresUserAction:NO]
Call some JS function
Wie können Sie das gleiche tun, wenn die webview ist WKWebView
statt?
Verwandte: Wie bekomme ich ein UIWebView, um den Fokus auf ein Formular-input und bringen Sie die Tastatur?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach dem Graben in der Webkit-Quellen für ein paar Wochen, ich habe es geschafft, diese arbeiten auf iOS 9 von swizzling
_startAssistingNode:userIsInteracting:blurPreviousNode:userObject
aufWKContentView
und überschreiben der userIsInteracting Wert:Pseudo-code:
Prost!
Die akzeptierte Antwort, funktioniert nicht mehr in iOS 11.3, da
WebKit
Signatur der Methode geändert hat. Hier ist ein workaround (in Obj-C):(UPDATE: Signatur der Methode geändert hat, ein paar mal mehr in iOS 12.2 und iOS-13, code unten wurde aktualisiert, um diese änderungen widerzuspiegeln)
Update: Diese Lösung funktioniert für iOS 13.0, 12.2, 11.* und 10.* Auch arbeitet man an iPadOS 13.1
Schrieb ich eine Erweiterung (in Swift 4 für
WKWebView
Klasse, fügtkeyboardDisplayRequiresUserAction
als berechnete Eigenschaft, genau wie in UIWebView.Nachdem er die apples offizielle open-source-Dokumente für WebKit, kam ich auf die folgenden runtime-swizzling:
Stellen Sie sicher, Eigentum nennen auf Ihrem WKWebView wie diese,
Stellen Sie außerdem sicher, dass Ihre HTML TextArea-element hat Autofokus eingestellt
true
sonst funktioniert es nicht.All paths to this function will call itself
.Dieser schnellen Erweiterung macht den job und ist kompatibel mit 11.3 sowie früher Versionen.
Musste ich ändern @Mark ' s Antwort von einer Nebenstelle auf eine Unterklasse, die als Swift 4.2 gab mir ein "Alle Pfade durch diese Funktion nennen sich" - Warnung auf der
keyboardDisplayRequiresUserAction
getter.Getestet auf iOS 11.2 und 12.0
myWebView.keyboardDisplayRequiresUserAction = true
wenn Sie dies, denn es ist nur initialisiert, in den setter.Update für iOS-13 als Methode wieder geändert:
Objective-C
Swift: