我只是想让撤消工作的行动,用户在我的应用程序中执行。默认情况下,任何文本编辑的用户做有撤消的好处,但任何行动,否则(从我的代码)没有。
我可以看到文档解释说,我需要得到NSUndoManager的实例,并调用registerUndoWithTarget,但我被第一步绊倒了:从我的ViewController内获得undoManager。由于ViewController是一个UIResponder,我尝试了这个:
if let undoManager = self.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
因为那个绑定返回nil,我想也许ViewController没有undoManager,所以我在窗口中寻找它:
if let window = NSApplication.sharedApplication().mainWindow {
if let undoManager = window.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
}
唉,窗口绑定也返回nil。对不起,我是新手。有人能给我指个方向吗?我应该实现自己的undmanager之类的吗?显然在某处有一个撤消管理器因为用户在我的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)
}