ios - 如何在 UIMenuController 的指定位置添加自定义 menuItem?
问题描述
UIMenuController 中有五个默认菜单项:剪切、复制、粘贴、查找、共享... 我想在菜单“粘贴”和“查找”之间添加一个自定义菜单项“粘贴和搜索”。
解决方案
您可以通过禁用系统菜单并使用创建自己的菜单来做到这一点UIMenuController
开始子类您的视图说UIWebView
or 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() {
}
}
推荐阅读
- android - 如何在 Row Jetpack Compose 中居中元素
- node.js - React failed create react app module not found
- python - 如何为 nosql 集合添加一个 pd 列作为 _id?
- cypress - 是否可以返回或等待返回柏树拦截?
- anylogic - SEIR感染图表上下波动
- reactjs - Next.js 应用程序中是否可以有多个 App 组件?
- python - 只有多个 if 约束某个名称
- python - django 管理站点外键从下拉列表到 search_field
- javascript - 如何将 Dart POST 请求转换为 JavaScript?
- angular - 如何更改 Ag-Grid 状态栏的状态面板行数名称