如何解决以编程方式构建 macOS 应用程序时,如何为 NSTextView 和 NSTextField 添加撤消/重做支持?
我已经坚持了一段时间。堆栈溢出也有类似的问题,但没有一个问题让我找到了我正在寻找的解决方案。此外,似乎在官方文档中找不到任何信息。
我正在以编程方式构建 macOS 应用程序。我已经以编程方式设置了自己的菜单栏。我有一个 NSTextView
和一些 NSTextfield
,我已经将它们完美地设置为另一个视图的子视图。这些类支持除撤消/重做功能之外的所有工作,我已经阅读了这些功能。我有 myTextView.allowsUndo = true
但它不起作用。为什么撤消管理器不会自动执行我很确定应该执行的操作?
let editMenu = NSMenuItem()
editMenu.submenu = NSMenu(title: "Edit")
editMenu.submenu?.items = [
NSMenuItem(title: "Undo",action: #selector(UndoManager.undo),keyEquivalent: "z"),NSMenuItem(title: "Redo",action: #selector(UndoManager.redo),keyEquivalent: "Z")
]
我认为这可能与将 UndoManager 链接到我的窗口或文本字段和视图有关?我想设置它而不必制作我自己的撤消管理器功能。
解决方法
这适用于我的系统:
// **** Edit Menu **** //
let editMenu = NSMenuItem()
editMenu.submenu = NSMenu(title: "Edit")
editMenu.submenu?.addItem(withTitle: "Undo",action: Selector(("undo:")),keyEquivalent: "z")
editMenu.submenu?.addItem(withTitle: "Redo",action: Selector(("redo:")),keyEquivalent: "Z")
editMenu.submenu?.addItem(.separator())
editMenu.submenu?.addItem(withTitle: "Cut",action: #selector(NSText.cut(_:)),keyEquivalent: "x")
editMenu.submenu?.addItem(withTitle: "Copy",action: #selector(NSText.copy(_:)),keyEquivalent: "c")
editMenu.submenu?.addItem(withTitle: "Paste",action: #selector(NSText.paste(_:)),keyEquivalent: "v")
editMenu.submenu?.addItem(withTitle: "Select All",action: #selector(NSText.selectAll(_:)),keyEquivalent: "a")
确保您有其他编辑菜单项。为了“撤消”某些事情,您必须从“做”开始。还需要设置 txtView.allowsUndo = true ,因为您已正确完成。请注意 Selector(someString) 与 #selector() 不同。它实际上是旧的 swift 语法,但它仍然有效。 Swift 的选择器依赖于 objc。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。