objective-c - NSUndoManager:禁用 "redo"进行破坏性操作

标签 objective-c cocoa nsundomanager

我想向我的 Mac 应用程序添加撤消/重做功能。该应用程序可与笔记一起使用,我想在用户删除笔记时添加“撤消”操作。

这工作得很好,“撤消删除注释”菜单在用户删除注释后变为事件状态,但是在使用“撤消删除注释”命令后,有一个“重做删除注释”菜单变为事件状态。

目前,当我单击“重做删除注释”时,没有任何反应,因为我没有注册操作。我不希望用户能够通过撤消/重做堆栈意外删除注释。

是否可以添加“撤消”操作而不添加“重做”操作?

最佳答案

一般情况下不会。这样做将违反平台标准撤消/重做机制的隐式契约。你希望你注册的东西是对称的。如果用户删除注释,则可用的撤消操作应该恢复该注释。如果用户选择撤消,则重做操作将是再次“删除注释”。如果用户通过撤消或重做“意外”删除了一条注释,那也没关系,因为他们应该始终能够通过执行相反的操作来恢复它,对吗?

别想太多。

关于objective-c - NSUndoManager:禁用 "redo"进行破坏性操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23786514/

相关文章:

iphone - 函数和过程之间的区别?

ios - willDisplayHeaderView 未在 TableViewController 中调用

objective-c - 为什么 Xcode 中出现这些错误意味着什么?

xcode - 获取 NSTextField 的 keyDown 事件

iphone - 撤消在 subview Controller 中所做的所有更改

ios - 更改 iOS 框架的导入

iphone - Hpple-All Nodes 为零

macos - addSubview(...) 导致额外的窗口

objective-c - 在 NSTextView 中捕获撤消和重做编辑文本组

cocoa - 如何使 NSUndoManager 撤消/重做操作名称正常工作?