提问人:Victor Engel 提问时间:10/4/2023 最后编辑:Victor Engel 更新时间:10/9/2023 访问量:33
如何确定触发上下文菜单显示的内容
How to determine what triggers a context menu presentation
问:
我正在开发适用于 iPad 和 Mac Catalyst 的应用程序。我已经使用自定义撤消管理器实现了撤消。这样一来,项目中的每个图层都可以有一个单独的撤消管理器。我注意到,有时当我长按该键时,我会得到这个上下文菜单。COMMAND
我已经在所有作为响应者的对象中添加了验证函数,以确定触发它的原因,但我找不到它。在这种情况下,没有什么可撤消的,所以我真的需要禁用该命令。如何确定是什么触发了它?
我已将 validate 函数添加到所有 、 自定义视图、 控件子类 和 .这些都没有触发它。我应该能够通过在正确的对象中使用 validate 函数来禁用该命令,但是我如何确定它是哪个对象?我可以用一个象征性的断点来捕获一些东西吗?还有其他想法吗?我真的不希望出现这个上下文菜单。viewControllers
appDelegate
sceneDelegate
UIResponder
一种选择是删除菜单,但我不想这样做。我实际上想要它,带有“撤消”和“重做”选项,但这些选项必须是可验证的。Edit
答:
我不喜欢这个答案,因为我认为这是一个笨拙的答案。此外,它特定于此键命令。在我添加Appdelegate
override var keyCommands: [UIKeyCommand]? {
[
UIKeyCommand(title: NSLocalizedString("Undo", comment: ""),
image: nil,
action: #selector(ViewController.undo),
input: "z",
modifierFlags: .command)
]
}
在 ViewController 中,我添加了一个空@objc func undo()(我可能会在以后的某个时候用一些东西实现它。但是,对于这种情况,没有什么可撤消的。
在我的验证函数中,撤消现在被捕获,所以当我禁用它时,它实际上被禁用了。
编辑:上面停止了菜单,但撤消操作仍然发生。为了抓住这一点,我列出了 .我没有取消撤消,因为这实际上没关系。但是我必须添加一个,以便刚刚撤消的视图将显示已撤消的操作。NSNotification.Name.NSUndoManagerWillUndoChange
setNeedsDisplay
评论
COMMAND