如何创建自定义 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 false
在 canPerformAction
和 return true
对于你想要的那些:
override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool {
if action == #selector(copy(_:)) || action == #selector(customMethod(_:)) {
return true
}
...
return false
}
我需要在用户选择任何文本时在 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 false
在 canPerformAction
和 return true
对于你想要的那些:
override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool {
if action == #selector(copy(_:)) || action == #selector(customMethod(_:)) {
return true
}
...
return false
}