如何在swift中访问我的Mac OS应用程序的undoManager?

时间:2015-06-01 19:04:42

标签: macos swift nsundomanager

我只是想让撤消工作用于用户在我的应用中执行的操作。默认情况下,编辑用户所执行的任何文本都具有撤消功能,但是否则(从我的代码中)执行的任何操作都不会。

我可以看到文档说明我需要获取NSUndoManager的一个实例并调用registerUndoWithTarget,但我对第一步感到难过:从我的ViewController中获取undoManager。由于ViewController是一个UIResponder,我试过这个:

tree2

由于该绑定返回nil,我认为ViewController可能没有undoManager,所以我在窗口中查找它:

if let undoManager = self.undoManager {
            undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
        }

唉,窗口绑定也返回nil。对不起,我对此很新。谁能指出我正确的方向?我应该实现自己的undoManager或其他什么?在某个地方显然有一个undoManager,因为用户在我的textField中手动执行的任何操作都会获得撤消行为。看起来这可能是一个单例,我可以从ViewController轻松访问。

- 编辑:BTW,上面的代码放在viewDidLoad中,removeLatestEntry只是我的ViewController中的一个函数,它接受一个字符串并在此时打印它。

1 个答案:

答案 0 :(得分:3)

要使用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)
}
相关问题