我正在尝试为类似于 Medium 的 iOS 功能的功能配置 UIMenuController 的菜单项:
有各种线程专门用于此特定任务,但尽管有成千上万的视图和不同的结果,包括它不能为足够多的人工作......似乎没有一个解决方案可以始终如一地工作对于 UITextView。
我已经能够添加自定义菜单选项“printToConsole”,但我无法禁用 Apple 的标准菜单项,如剪切、复制、粘贴、B I U 等:
共识似乎是我应该覆盖 canPerformAction 以禁用这些默认菜单项,但这似乎不起作用:
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
print("canPerformAction being called")
if action == #selector(cut(_:)) {
return false
}
if action == #selector(copy(_:)) {
return false
}
if action == #selector(select(_:)) {
return false
}
if action == #selector(paste(_:)) {
return false
}
if action == #selector(replacementObject(for:)) {
return false
}
if action == #selector(selectAll(_:)) {
return false
}
if action == #selector(printToConsole) {
return true
}
return super.canPerformAction(action, withSender: sender)
}
这是我的相关代码的其余部分:
func addCustomMenu() {
let consolePrintAction = UIMenuItem(title: "Print To Console", action: #selector(printToConsole))
UIMenuController.shared.menuItems = [consolePrintAction]
UIMenuController.shared.update()
}
@objc func printToConsole() {
if let range = articleTextView.selectedTextRange, let selectedText = articleTextView.text(in: range) {
print(selectedText)
}
}
在我看来DidLoad:
articleTextView.delegate = self
addCustomMenu()
我也将我的 viewController 设置为符合 UITextViewDelegate 。有些人建议,如果您只是将 TextView 子类化,这将以某种方式起作用。我无法让它发挥作用,所以如果这确实是答案,有人可以提供一个例子吗?
同样,我知道这可能看起来像重复,但上述解决方案似乎已停止使用 iOS 更新。
谢谢。