2014-09-25 71 views
7

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

更新:我已提起诉讼,这是雷达18487289.

+1

我有同样的问题,有什么进展? – avdyushin 2015-06-08 12:21:57

+0

@avdyushin no。但我在WWDC。本周要去问某人。 – 2015-06-08 16:04:12

+0

@avdyushin这是一个已知的问题,但没有时间表。现在完整的解决方案是隐藏willShow上的菜单,并使用任何你想要的选项来制作和呈现你自己的菜单。 – 2015-06-15 14:49:14

回答

2

对于iOS 11,简单地继承WKWebView并覆盖canPerformAction回到false

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

对于iOS 10或更早,调酒WKContentViewcanPerformAction方法:

@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添加自定义菜单项。