我有一个带有WKWebView
的应用程序。在此应用程序中,我自定义UIMenuController
中提供的选项。无论我做什么,Web View 似乎都将“复制”和“定义”选项添加到菜单中。如果我将自己设置为第一响应者,并且对所有内容均返回否,则仍会得到复制并定义选项。而且我已经实现了自己的复制选项,该选项根据用户的喜好和选择的内容来做特殊的事情。有没有办法删除这些额外的选项?
更新:我已将其归档为雷达18487289。
最佳答案
对于iOS 11,只需将WKWebView
子类化并覆盖canPerformAction
以返回false
:
class WebView : WKWebView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
}
对于iOS 10或更早版本,请使用
WKContentView
的canPerformAction
方法:@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))!
)
删除这些Web View 的内置菜单项后,您可以像平常一样通过
UIMenuController.shared
添加自定义菜单项。