【问题标题】:Question about deleting UIMenuController default menuItems inside WKWebView in Swift关于在 Swift 中删除 WKWebView 中的 UIMenuController 默认 menuItems 的问题
【发布时间】: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 谢谢。但结果还是一样。

标签: ios swift


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 2020-02-27
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多