如何使用默认以外的自定义项创建自定义UIMenuController?

时间:2016-06-21 13:15:05

标签: swift menuitem uimenucontroller

每当用户选择任何文字时,我都要求在uiwebview上显示菜单项。 enter image description here

我试过了

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

UIMenuController.sharedMenuController().menuItems = [highlightMenuItem]

但是这只会添加更多菜单项和默认的现有菜单项。就像这个

enter image description here enter image description here

有没有办法实现这一点,只有菜单项目Copy,Highlight和Note?

1 个答案:

答案 0 :(得分:12)

您可以通过继承UIWebView并覆盖canPerformAction(Swift 3)来实现此目的。然后,您需要做的就是返回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)
  }

}

如果您有任何疑问,请询问!

修改如果您想要停用所有操作,只有少数可能更容易在false中返回canPerformAction并返回true想要这样:

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