【发布时间】:2018-10-19 01:42:12
【问题描述】:
UIMenuController 中有五个默认菜单项:剪切、复制、粘贴、查找、共享...我想在菜单“粘贴”和“查找”之间添加一个自定义菜单项“粘贴和搜索”。
【问题讨论】:
-
你将用于 WebView
标签: ios swift uimenucontroller
UIMenuController 中有五个默认菜单项:剪切、复制、粘贴、查找、共享...我想在菜单“粘贴”和“查找”之间添加一个自定义菜单项“粘贴和搜索”。
【问题讨论】:
标签: ios swift uimenucontroller
您可以通过禁用系统菜单并使用UIMenuController 创建您自己的菜单来做到这一点
开始子类你的视图说 UIWebView 或 UItextView , UIScrollView,..etc 并覆盖此方法 override func canPerformAction(_ action: Selector, withSender sender: Any?) 以禁用系统菜单项
这样 - UIWebView 示例
import UIKit
class CustomWebView: UIWebView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false // Disable Menu system
}
}
然后开始创建自己的菜单,并实现其功能复制粘贴,...
class ViewController: UIViewController{
@IBOutlet var webView: CustomWebView!
override func viewDidLoad() {
super.viewDidLoad()
self.webView.loadHTMLString("<p>Hello, world!</p>", baseURL: nil)
enableCustomMenu()
}
func enableCustomMenu() {
let cut = UIMenuItem(title: "Cut", action: #selector(runCut))
let copy = UIMenuItem(title: "Copy", action: #selector(runCopy))
let paste = UIMenuItem(title: "Paste", action: #selector(runPaste))
let pasteSearch = UIMenuItem(title: "Paste and Search", action: #selector(runPasteSearch))
let look = UIMenuItem(title: "Look Up", action: #selector(runLook))
// ----> here Arrange as you can
UIMenuController.shared.menuItems = [cut,copy,paste,pasteSearch,look]
}
func disableCustomMenu() {
UIMenuController.shared.menuItems = nil
}
@objc func runCut() {
}
@objc func runCopy() {
let text = webView.stringByEvaluatingJavaScript(from: "window.getSelection().toString();")
print(text ?? "")
}
@objc func runPaste() {
}
@objc func runPasteSearch() {
}
@objc func runLook() {
}
}
【讨论】: