2014-09-25 10 views
7

Ich habe eine App mit einem WKWebView drin. In dieser App passe ich die Optionen an, die im UIMenuController präsentiert werden. Die Webansicht scheint dem Menü Optionen kopieren und definieren hinzuzufügen, egal was ich mache. Wenn ich mich als Ersthelfer einstelle und für alles NEIN zurückgebe, bekomme ich immer noch Kopien und definiere Optionen. Und ich habe meine eigene Kopieroption implementiert, die spezielle Dinge abhängig von Benutzereinstellungen und was genau ausgewählt ist. Gibt es eine Möglichkeit, diese zusätzlichen Optionen zu entfernen?WKWebView und UIMenuController

aktualisieren: Ich habe dies als Radar eingereicht 18487289.

+1

Ich habe dasselbe Problem, keinen Fortschritt? – avdyushin

+0

@avdyushin nein. Aber ich bin auf der WWDC. Ich werde diese Woche jemanden fragen. –

+0

@avdyushin es ist ein bekanntes Problem, aber keine Zeitleiste. Die vollständige Lösung für jetzt ist das Menü auf WillShow zu verbergen und Ihre eigenen mit beliebigen Optionen zu machen und zu präsentieren. –

Antwort

2

Für iOS 11, einfach WKWebView Unterklasse und überschreiben canPerformActionfalse zurückzukehren:

class WebView : WKWebView { 
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 
     return false 
    } 
} 

Für iOS 10 oder früher, swizzle WKContentView ‚s canPerformAction Methode:

@objc private extension UIResponder { 
    func swizzle_canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 
     return false 
    } 
} 

guard let viewClass = NSClassFromString("WKContentView") as? UIView.Type else { return } 
method_exchangeImplementations(
    class_getInstanceMethod(viewClass, #selector(UIResponder.canPerformAction))!, 
    class_getInstanceMethod(UIResponder.self, #selector(UIResponder.swizzle_canPerformAction))! 
) 

Nachdem Sie die integrierten Menüelemente der Webansicht entfernt haben, können Sie Ihre benutzerdefinierten Menüelemente wie gewohnt über UIMenuController.shared hinzufügen.