【问题标题】:Using External Classes method as action for NSMenuItem?使用外部类方法作为 NSMenuItem 的操作?
【发布时间】:2021-01-12 19:00:42
【问题描述】:

第一次发帖,非常新手 swift 用户。我遇到了使用外部类方法作为 NSMenuItem 的操作的问题。我已经建立了一个名为 NewDocument 的新类,它具有 newDoc 方法。

我想将此方法用作 NSMenuItem 的操作。但是,当我使用它时,菜单项是灰色的?即使我将目标设置为 NewDocument,它仍然无法工作。

非常感谢任何指导或帮助。

//Creating Instance of class
let createNewDocument = NewDocument()

//Use selector to declare method as action
let menuItem = NSMenuItem(title: "New", action: #selector(createNewDocument.newDoc), keyEquivalent: "")

//Set target to new instance of class
menuItem.target = createNewDocument

新建文档类

class NewDocument: NSObject {
    @objc func newDoc() {
        // new document logic
    }
}

【问题讨论】:

  • 阅读en.wikipedia.org/wiki/Target%E2%80%93action。选择器只是包含方法名称的特殊字符串。 Swift 中的#selector 语法用于让编译器为您生成字符串,以防止您写错字。您要使用的方法必须属于一个类。 createNewDocument 是一个实例,而不是一个类。你可能想要#selector(NewDocument.newDoc)
  • createNewDocument 是否因为超出范围而被释放?

标签: swift xcode macos nsmenuitem


【解决方案1】:
  • 目标是类的实例——createNewDocument
  • 选择器是类型+方法——#selector(NewDocument.newDoc)

【讨论】:

  • 好的,还是不确定。那我应该使用#selector 吗?您能否澄清一下在这种情况下您所说的类型是什么意思?
  • 类的类型是NewDocument
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多