首页 > 解决方案 > 在 UndoManager 中支持不重做的撤消

问题描述

在我的应用程序中,用户界面提供了一个按钮,允许人们撤消他们已经执行的操作,但是一旦他们撤消了一个操作,就无法重做。我现在想更新我的应用程序以支持 Command Z 键盘快捷键撤消。UIKeyCommand但是,如果我用input: "z"and创建一个modifierFlags: .command,它会被忽略并且不会显示为可用的键盘快捷键。似乎必须使用UndoManager自动获取撤消和重做键盘快捷键。但是重做选项没有做任何事情,所以我想阻止该键盘快捷键出现在用户面前。我试图通过返回 false 来做到这一点,canPerformAction:sender:但有趣的是并没有删除它。如何在使用 UndoManager 时支持撤消但不支持重做、保持重做堆栈为空或以其他方式隐藏重做选项?

@objc protocol RedoActionRespondable {
    func redo(_ sender: Any)
}

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    switch action {
        case #selector(RedoActionRespondable.redo(_:)):
            return false
        default:
            return super.canPerformAction(action, withSender: sender)
        }
    }
}

标签: iosnsundomanageruikeycommand

解决方案


推荐阅读