10

我有一个应用程序WKWebView。在这个应用程序中,我自定义了UIMenuController. 无论我做什么,网络视图似乎都会向菜单添加复制和定义选项。如果我将自己设置为第一响应者并对所有内容都返回 NO,我仍然会得到复制和定义选项。而且我已经实现了我自己的复制选项,它根据用户的偏好和确切的选择来做一些特殊的事情。有没有办法删除这些额外的选项?

更新:我已将此归档为雷达 18487289。

4

2 回答 2

3

对于 iOS 11,只需子类化WKWebView并覆盖canPerformAction即可返回false

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

对于 iOS 10 或更早版本, swizzleWKContentViewcanPerformAction方法:

@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像往常一样添加自定义菜单项。

于 2017-12-05T15:21:47.673 回答
1

这似乎已在 iOS 13 beta 1 中修复。

于 2019-06-10T18:29:25.297 回答