我正在尝试配置 UIMenuController 的菜单项以获得类似于 Medium 的 iOS 功能的功能:
有各种线程致力于此特定任务,但是尽管有数以万计的视图和不同的结果,包括它不适用于足够多的人......似乎没有一个始终有效的解决方案对于 UITextView。
我已经能够添加自定义菜单选项“printToConsole”,但我无法禁用Apple的标准菜单项,例如剪切,复制,粘贴,B I U, etc:
共识似乎是我应该重写 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 更新一起使用。
Thanks.