如何创建自定义 UIMenuController,仅包含默认项以外的自定义项?

how to create Custom UIMenuController with only custom items other than default?

我需要在用户选择任何文本时在 uiwebview 上显示菜单项。

我试过了

let highlightMenuItem = UIMenuItem(title: "Highlight", action: #selector(ViewController.hightlight))

UIMenuController.sharedMenuController().menuItems = [highlightMenuItem]

但这只会在默认现有菜单项的基础上附加更多菜单项。因为这个

是否有任何方法可以仅通过菜单项复制、突出显示和注释来实现此目的?

您可以通过继承 UIWebView 并覆盖 canPerformAction (Swift 3) 来实现这一点。然后,您需要做的就是 return false 来禁用您想要禁用的任何操作。

示例:

class EditedUIMenuWebView: UIWebView {

  override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool {
    if action == #selector(cut(_:)) {
      return false
    }
    if action == #selector(paste(_:)) {
      return false
    }
    if action == #selector(select(_:)) {
      return false
    }
    if action == #selector(selectAll(_:)) {
      return false
    }
    ...

    return super.canPerformAction(action, withSender: sender)
  }

}

如有任何问题欢迎提问!

编辑 如果你想禁用除少数之外的所有操作,可能更容易 return falsecanPerformAction 和 return true 对于你想要的那些:

override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool {
   if action == #selector(copy(_:)) || action == #selector(customMethod(_:)) {
     return true
   }
   ...
   return false
 }