问题
I have an app with a WKWebView
in it. In this app, I customize the options presented in the UIMenuController
. The web view seems to add Copy and Define options to the menu no matter what I do. If I set myself as first responder and return NO for everything, I still get copy and define options. And I've implemented my own copy option that does special things depending on user preferences and what exactly is selected. Is there a way to remove these extra options?
Update: I've filed this as radar 18487289.
回答1:
For iOS 11, simply subclass WKWebView
and override canPerformAction
to return false
:
class WebView : WKWebView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
}
For iOS 10 or earlier, swizzle WKContentView
's canPerformAction
method:
@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))!
)
After remove those web view's build-in menu items, you can add your custom menu items via UIMenuController.shared
like normal.
回答2:
This appears to be fixed in iOS 13 beta 1.
来源:https://stackoverflow.com/questions/26046098/wkwebview-and-uimenucontroller