I have requirement to show menu items on uiwebview whenever user selects any text.
I have tried
let highlightMenuItem = UIMenuItem(title: "Highlight", action: #selector(ViewController.hightlight))
UIMenuController.sharedMenuController().menuItems = [highlightMenuItem]
but this only appends more menu item with default existing one. as this
Is there any way out to achieve this with only menu items Copy, Highlight and Note?
You can achieve this by subclassing UIWebView
and overriding canPerformAction
(Swift 3). Then, all you need to do is return false
for whichever actions you want disabled.
Example:
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)
}
}
If you have any questions please ask!
Edit If you want to disable all actions but a few it may be easier to just return false
in canPerformAction
and return true
for the ones you want like so:
override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool {
if action == #selector(copy(_:)) || action == #selector(customMethod(_:)) {
return true
}
...
return false
}