微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式构建 macOS 应用程序时,如何为 NSTextView 和 NSTextField 添加撤消/重做支持?

如何解决以编程方式构建 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?