我有一个应用程序WKWebView
。在这个应用程序中,我自定义了UIMenuController
. 无论我做什么,网络视图似乎都会向菜单添加复制和定义选项。如果我将自己设置为第一响应者并对所有内容都返回 NO,我仍然会得到复制和定义选项。而且我已经实现了我自己的复制选项,它根据用户的偏好和确切的选择来做一些特殊的事情。有没有办法删除这些额外的选项?
更新:我已将此归档为雷达 18487289。
我有一个应用程序WKWebView
。在这个应用程序中,我自定义了UIMenuController
. 无论我做什么,网络视图似乎都会向菜单添加复制和定义选项。如果我将自己设置为第一响应者并对所有内容都返回 NO,我仍然会得到复制和定义选项。而且我已经实现了我自己的复制选项,它根据用户的偏好和确切的选择来做一些特殊的事情。有没有办法删除这些额外的选项?
更新:我已将此归档为雷达 18487289。
对于 iOS 11,只需子类化WKWebView
并覆盖canPerformAction
即可返回false
:
class WebView : WKWebView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
}
对于 iOS 10 或更早版本, swizzleWKContentView
的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 视图的内置菜单项后,您可以UIMenuController.shared
像往常一样添加自定义菜单项。
这似乎已在 iOS 13 beta 1 中修复。