无法在Swift 4.2中撤消、重做和再次撤消
在swift 4.2中,我无法在初始撤销后重做然后撤销。UndoManager.registerUndo中的选择器。。。在重做和后续撤消期间从不调用 我在项目和操场上都尝试过,变化无穷无法在Swift 4.2中撤消、重做和再次撤消,swift,cocoa,nsundomanager,Swift,Cocoa,Nsundomanager,在swift 4.2中,我无法在初始撤销后重做然后撤销。UndoManager.registerUndo中的选择器。。。在重做和后续撤消期间从不调用 我在项目和操场上都尝试过,变化无穷 import Cocoa class UndoResponder: NSObject { @objc func printSender(_ sender: Any) { print("printSender: ", sender) } } var undoResponder =
import Cocoa
class UndoResponder: NSObject {
@objc func printSender(_ sender: Any) {
print("printSender: ", sender)
}
}
var undoResponder = UndoResponder()
var undoManager = UndoManager()
undoManager.registerUndo(withTarget: undoResponder, selector:
#selector(UndoResponder.printSender(_:)), object: "Hi!")
print("about to undo")
undoManager.undo()
print("about to redo")
undoManager.redo()
print("about to undo")
undoManager.undo()
// output:
// about to undo
// printSender: Hi!
// about to redo
// about to undo
预期产出:
// about to undo
// printSender: Hi!
// about to redo
// printSender: Hi!
// about to undo
// printSender: Hi!
正如问题评论中指出的,我没有注册重做。因此,我将其替换为以下内容:
import Cocoa
class Undoable {
var undoManager = UndoManager()
var object: Any = "None"
@objc func setObject(_ newObject: Any) {
let oldObject = object
object = newObject
undoManager.registerUndo(withTarget: self, selector:
#selector(Undoable.setObject(_:)), object: oldObject)
}
func undo() {
undoManager.undo()
print("after undo: ", object)
}
func redo() {
undoManager.redo()
print("after redo: ", object)
}
}
let undoable = Undoable()
print("Initial: ", undoable.object)
undoable.setObject(1)
print("After set: ", undoable.object)
undoable.undo()
undoable.redo()
undoable.undo()
输出:
Initial: (None)
After set: 1
after undo: (None)
after redo: 1
after undo: (None)
撤消不注册重做。看@Willeke,噢!