如何在 UIMenuController 的指定位置添加自定义 menuItem?
How to add custom menuItem in specified position of UIMenuController?
UIMenuController 中有五个默认菜单项:剪切、复制、粘贴、查找、共享...我想在菜单 "Paste" 和 [= 之间添加一个自定义菜单项 "Paste and Search" 14=].
您可以通过禁用系统菜单并使用 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() {
}
}
UIMenuController 中有五个默认菜单项:剪切、复制、粘贴、查找、共享...我想在菜单 "Paste" 和 [= 之间添加一个自定义菜单项 "Paste and Search" 14=].
您可以通过禁用系统菜单并使用 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() {
}
}