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



我只是想让撤消工作的行动,用户在我的应用程序中执行。默认情况下,任何文本编辑的用户做有撤消的好处,但任何行动,否则(从我的代码)没有。

我可以看到文档解释说,我需要得到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)
}

相关内容

  • 没有找到相关文章

最新更新