swift - 在 Swift 4.2 中无法撤消、重做和再次撤消
问题描述
在 swift (4.2) 中,我无法在初始撤消后重做然后撤消。UndoManager.registerUndo(...) 中的选择器在重做和后续撤消期间永远不会被调用
我已经在项目和游乐场中尝试过这个,变化无穷。
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)
推荐阅读
- perl - 如何从 Perl 中的结构数组中删除重复项?
- java - 如何使用 .stream() 将存储库中的数据按字母顺序排序
- esp8266 - 我无法使用 micropython 在 ESP8266/nodemcu 上获得 python 提示
- ruby - 将数组元素转换为哈希
- html - 货币转换器 - 当我按下按钮时没有任何反应
- hashids - 为什么哈希值可以被解码?
- string - 在python中使用字符串时的Min函数
- python - PythonAnywhere WSGI 报错(解决方法未找到如何设置是)
- python - 使用 BeautifulSoup 解析 HTML 结构
- clojure - 无法获得 datomic 客户端工件