关于在 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 4 WKWebView cookie 获取和删除同步问题
如何从 WKWebview 中删除或隐藏 PDF 的页面计数器?