关于在 Swift 中删除 WKWebView 中的 UIMenuController 默认 menuItems 的问题

Posted

技术标签:

【中文标题】关于在 Swift 中删除 WKWebView 中的 UIMenuController 默认 menuItems 的问题【英文标题】:Question about deleting UIMenuController default menuItems inside WKWebView in Swift 【发布时间】:2020-06-24 02:11:49 【问题描述】:

我想在 WKWebView 中使用自定义 UIMenuController。

首先,我想摆脱默认菜单(复制、查找、分享),但由于某种原因我不知道,但它并没有消失。

override open func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool 
        switch action 
        case #selector(highlightHandler):
            return true
        default:
            return false
        
    
func enableCustomMenu() 
        let memo = UIMenuItem(title: "메모", action: #selector(highlightHandler))
        UIMenuController.shared.menuItems = [memo]
        UIMenuController.shared.update()
    
 @objc func highlightHandler(sender: UIMenuItem)  

我尝试使用上面的代码删除默认的 menuItems 并添加名为“메모”的自定义 menuItems,但它没有。

如何只显示我想要的名为“메모”的项目?

【问题讨论】:

您确定正在调用canPerformAction 方法吗? 试试override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool [#selector(highlightHandler)].contains(action) 不需要调用update()。显示您拨打的位置UIMenuController.shared.showMenu(... @Leo Dabus 谢谢。但结果还是一样。 【参考方案1】:

canPerformAction() 在大多数情况下不能拒绝一个选项。它只能告诉系统它被调用的类愿意提供所需的功能。返回 False 只是说“我不能做那个”,然后调用响应者链中的下一个项目,最终找到“是的,我可以做那个”的东西。话虽如此,如果我在作为第一响应者的项目上覆盖此函数,我似乎会得到不同的结果。在这种情况下, False 实际上似乎禁用了该命令。因此,如果您可以在第一响应者上实现 canPerformAction(),请执行此操作。如果没有……

基本上你必须暂时中断响应者链。您可以通过覆盖 UIResponder “next” 变量来做到这一点,以便在您希望链断开时它有条件地返回 nil。您不希望它长时间损坏,否则会发生坏事。 FirstResponder 批准的任何内容或 First 与您之间的响应者链中的事物仍将获得批准,但这将停止对链中您之后的事物的批准。

【讨论】:

以上是关于关于在 Swift 中删除 WKWebView 中的 UIMenuController 默认 menuItems 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中删除 WKWebView 附件栏

Swift 4 WKWebView cookie 获取和删除同步问题

来自钥匙串的 Swift 4 WKWebView 身份验证

如何从 WKWebview 中删除或隐藏 PDF 的页面计数器?

WKWebView target="_blank" 链接在 safari ios11,swift 4 中打开新标签

在 didFinish 函数 WKWebView 中启用横向