- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试配置 UIMenuController 的菜单项以获得类似于 Medium 的 iOS 功能的功能:
有各种线程专门用于此特定任务,但尽管有数以万计的观点和不同的结果,包括它不适用于足够多的人......似乎没有解决方案对于 UITextView 始终有效。
我已经能够添加自定义菜单选项“printToConsole”,但我无法禁用 Apple 的标准菜单项,例如剪切、复制、粘贴、B I你等:
共识似乎是我应该覆盖 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)
}
}
在我的 viewDidLoad 中:
articleTextView.delegate = self
addCustomMenu()
我已将我的 viewController 设置为也符合 UITextViewDelegate。有些人建议,如果您只是将 TextView 子类化,这将以某种方式起作用。我无法让它发挥作用,所以如果这真的是答案,有人可以提供一个例子吗?
同样,我知道这可能看起来像是重复的,但上述解决方案似乎已停止使用 iOS 更新。
谢谢。
最佳答案
要感谢@gaurav 对这个问题的回答,这一定是我在寻找 SO 时逃脱的:https://stackoverflow.com/a/46470592/7134142
关键的代码是这样的,它扩展了 UITextView,而不是继承它:
extension UITextView {
open override func canPerformAction(_ action: Selector, withSender
sender: Any?) -> Bool {
return false
}
在我的 View Controller 中覆盖 canPerformAction 是不必要的,上面的代码仍然允许您添加自定义菜单项。这就是我最终得到的:
关于ios - 无法在 UITextView 的 UIMenuController 中禁用默认 UIMenuItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014624/
有一种方法可以禁用默认的 UIMenuItem 不影响消息 UIMenuItem? ViewDidLoad: JSQMessagesCollectionViewCell.registerMenuAct
我知道 UIMenuController 可以显示包含剪切、复制、粘贴、全选和其他系统菜单项的弹出窗口。但我不知道最后一项是什么,在上面的屏幕截图中可见。它的作用是什么?它会在应用程序中调用任何东西吗
我正在尝试将自定义操作添加到 UIMenuController 以便在 UITableViewCell 上使用,但在显示菜单时它不会出现。 编辑:修改后的代码。 这是代码: class ViewCon
伙计们,我用相同的选择器创建了多个UIMenuItem: ["first", "second", "third"].forEach({ (menu) in let b = UIMenuItem
我在创建新的 UIMenuItem 并为其分配选择器时遇到问题。问题是它会在不点击的情况下自动调用其选择器。这是我的代码: let customMenuItem1 = UIMenuItem(title
我已经成功地将自定义UIMenuItem添加到我的iPhone应用程序中的复制和粘贴菜单中,甚至子类化UITextView以摆脱标准菜单项。但是,我需要做的是以某种方式捕获菜单将在实际发生之前显示的事
我正在尝试设置 UIMenuItem 的 accessibilityLabel,但它似乎没有效果。无论如何,VoiceOver 只是读取项目的标题: let foo = UIMenuItem(
我试图在自定义 UIMenuItem 中显示多行文本。 我尝试在 UIMenuItem 的 title 属性中使用一个简单的“\n”,但没有成功。 例子: UIMenuItem *menuItem;
我已经实现了一个 UIMenuItem,通过长按 TableViewController 上的一个项目来显示,该项目是 UITabBarController 的一个元素。 我像下面那样做了 - (vo
我想在选择菜单中添加自己的命令,同时保留标准的“复制”、“剪切”等命令。我用这个: UIMenuItem *myItem = [[UIMenuItem alloc] initWithTitle
我是 iOS 开发的新手,我正在研究 UIMenuController。看起来我们需要为每个 UIMenuItem 使用不同的选择器。 有没有办法让单个选择器确定我点击了哪个项目? 我们可以向选择器发
使用以下设置 .... MyUIMenuItem *someAction = [[MyUIMenuItem alloc]initWithTitle : @"Something" action :
我有一个 UICollectionView,每个单元格中有两个 UITextView,我想在选择文本时添加一个自定义菜单项。我在 CollectionViewCell 类中做了什么: override
我正在尝试禁用 PDFKit 中的 UIMenuItems。我已经实现了 override func canPerformAction(_ action: Selector, withSender s
我的屏幕上有很多 UITextView,我想为其中一个添加一个新的自定义 UIMenuItem。 可以为特定的 UITextView 添加自定义 UIMenuItem 吗? 我使用下面的代码,但我为所
我正在创建自定义 UIMenuItem 并将其添加到共享 UIMenuController 的 menuItems 数组: let menuItemCustom = UIMenuItem(title:
我在我的 View Controller 的 - (void)viewDidLoad 方法中添加了一个自定义菜单: UIMenuItem *menuItem = [[UIMenuItem alloc]
我看到这是可能的 — iBooks 应用程序可以做到。 有什么办法吗? 最佳答案 我写了一个类别来支持 UIMenuItem 的图像。它基于方法混合,但在大多数情况下应该是安全的。 https://g
我正在尝试使用 UIMenuCnotroller 来显示动态生成的项目列表,它们共享相同的操作方法,因此我需要知道在单个操作方法中选择了哪个项目。 但是在action方法中- (void)menuIt
我正在尝试将 UIMenuController 用于动态菜单(标题和操作来自服务器)。问题是我必须使用 UIMenuItems initWithTitle:action: 其中 action 是 @s
我是一名优秀的程序员,十分优秀!