【问题标题】:NSUndoManager: disable "redo" for destructive actionNSUndoManager:禁用“重做”以进行破坏性操作
【发布时间】:2014-07-10 07:00:29
【问题描述】:

我想在我的 Mac 应用程序中添加撤消/重做功能。该应用适用于笔记,我想在用户删除笔记时添加“撤消”操作。

这很好用,“撤消删除笔记”菜单在用户删除笔记后变为活动状态,但在使用“撤消删除笔记”命令后,“重做删除笔记”菜单变为活动状态。

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

是否可以在不添加“重做”操作的情况下添加“撤消”操作?

【问题讨论】:

  • 我不知道你是否可以,但我知道这是你真的不想做的事情。良好的应用程序设计中有一个概念称为宽恕。当有人删除某些东西,改变主意,然后发现他们没有能力撤消删除时,这不是很宽容。同时,您需要弄清楚为什么没有相应的 Undo 操作,并且您可以自定义 Undo 菜单项字符串以减少混乱。 “恢复笔记,”也许?
  • NSUndoManager 将维护撤消和重做堆栈。当您使用“重做删除”时,“撤消删除”将再次出现。所以不可逆的事故是没有问题的。

标签: objective-c cocoa nsundomanager


【解决方案1】:

一般情况下不会。这样做将违反平台标准撤消/重做机制的隐含契约。你希望你注册的东西是对称的。如果用户删除了一个注释,那么可用的撤消操作应该会恢复该注释。如果用户选择撤消,那么重做动作将是再次“删除笔记”。用户是否“不小心”通过撤消或重做删除了笔记应该没有关系,因为他们应该总是能够通过执行相反的操作来取回它,对吧?

不要想太多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-01-17
    • 2021-01-30
    • 2011-07-02
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多