我只是试图让用户在我的应用程序中执行的操作撤消。默认情况下,用户所做的任何文本编辑都具有撤消的好处,但以其他方式(通过我的代码)完成的任何操作都没有。
我可以看到文档解释说我需要获取 NSUndoManager 的实例并调用 registerUndoWithTarget,但我对第一步感到困惑:从我的 ViewController 中获取 undoManager。由于 ViewController 是一个 UIResponder,我尝试了这个:
if let undoManager = self.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
由于该绑定(bind)返回 nil,我想也许 ViewController 没有 undoManager,所以我在窗口中查找它:
if let window = NSApplication.sharedApplication().mainWindow {
if let undoManager = window.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
}
唉,窗口绑定(bind)也返回 nil。对不起,我对此很陌生。谁能指出我正确的方向?我应该实现自己的 undoManager 还是什么?某处显然有一个 undoManager,因为用户在我的 textField 中手动执行的任何操作都会出现撤消行为。这似乎是一个我可以从 ViewController 轻松访问的单例。
-- 编辑:顺便说一句,上面的代码放在 viewDidLoad 中,removeLatestEntry 只是我的 ViewController 中的一个函数,它接受一个字符串并在此时打印它。
最佳答案
要使用 undoManager,ViewController 需要成为第一响应者。所以:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
becomeFirstResponder()
}
然后,无论您的操作被定义为需要撤消,您都可以注册您的撤消并传递它以撤消该操作所需的任何内容。所以就我而言:
func addEntry(activity: String) {
// some other stuff…
undoManager!.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: activity)
}
关于macos - 如何快速访问我的 Mac OS 应用程序的 undoManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581243/