如何在 swift 中访问我的 Mac OS 应用程序的 undoManager?
How do I access the undoManager for my Mac OS app in swift?
我只是想让撤消对用户在我的应用程序中执行的操作起作用。默认情况下,用户所做的任何文本编辑都具有撤消的好处,但是以其他方式(从我的代码)完成的任何操作都没有。
我可以看到文档解释说我需要获取 NSUndoManager 的实例并调用 registerUndoWithTarget,但我对第一步感到困惑:从我的 ViewController 中获取 undoManager。由于 ViewController 是一个 UIResponder,我试过这个:
if let undoManager = self.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
由于绑定 returns 为零,我想也许 ViewController 没有 undoManager,所以我在 window:
中查找它
if let window = NSApplication.sharedApplication().mainWindow {
if let undoManager = window.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
}
唉,window 绑定也 returns 没有。对不起,我对此很陌生。谁能指出我正确的方向?我应该实现自己的 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)
}
我只是想让撤消对用户在我的应用程序中执行的操作起作用。默认情况下,用户所做的任何文本编辑都具有撤消的好处,但是以其他方式(从我的代码)完成的任何操作都没有。
我可以看到文档解释说我需要获取 NSUndoManager 的实例并调用 registerUndoWithTarget,但我对第一步感到困惑:从我的 ViewController 中获取 undoManager。由于 ViewController 是一个 UIResponder,我试过这个:
if let undoManager = self.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
由于绑定 returns 为零,我想也许 ViewController 没有 undoManager,所以我在 window:
中查找它if let window = NSApplication.sharedApplication().mainWindow {
if let undoManager = window.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
}
唉,window 绑定也 returns 没有。对不起,我对此很陌生。谁能指出我正确的方向?我应该实现自己的 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)
}