gpt4 book ai didi

macos - 如何快速访问我的 Mac OS 应用程序的 undoManager?

转载 作者:可可西里 更新时间:2023-11-01 01:05:51 24 4
gpt4 key购买 nike

我只是试图让用户在我的应用程序中执行的操作撤消。默认情况下,用户所做的任何文本编辑都具有撤消的好处,但以其他方式(通过我的代码)完成的任何操作都没有。

我可以看到文档解释说我需要获取 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com