Swift 中的自定义 NSmenuitem

Custom NSmenuitem in Swift

我在使用自定义 NSMenuItem() 时遇到问题。到目前为止,我已经创建了一个 class:

class AllCurrencyList: NSView {

    @IBOutlet var allccyimage: NSImageView!

    @IBOutlet var allccytext: NSTextField!

}

我已经用上面提到的两个 IBOutlet 创建了一个 xib,但我很难在我的菜单中使用它。这是我正在尝试做的事情:

let menu = NSMenu()
let item = NSMenuItem()
item.view = AllCurrencyList //I get the error [Cannot assign a value of type 'AllCurrencyList.Type' to a value of type 'NSView?']

item.allccytext = "foo"
item.allccyimage = NSImage(named: "foo")

我找到的大部分教程都在 Objective C 中,我正在努力寻找 Swift 中的示例。

感谢您的帮助。

编辑

Grimxn 的回答是正确的,但由于某些原因我一直得到 fatal error: unexpectedly found nil while unwrapping an Optional value on (item.view as! AllCurrencyList).allccytext.stringValue = "foo"

要修复它,我必须在我的主情节提要中创建我的自定义视图,并在 class 中创建一个引用我的视图的 IBoutlet 我正在从中创建 NSMenu。我仍然不明白为什么我不能使用我在不同的故事板文件中创建的视图。对于 运行 遇到相同问题的任何人,this was of great help.

首先,您尝试将 Class 而不是 class 的实例分配给 item.view - 使用

item.view = AllCurrencyList() // '()' instantiates

其次,item 没有那些属性 allccytextallccyimage - item 是一个 NSMenuItem。您需要将您的值分配给它们 item.view.allccytext.stringValueitem.view.allccyimage.image

但是item.view严格来说仍然是一个NSView,所以你还需要将item.view转换为你的子class,并且你需要确保两者@IBOutlets 连接正确(我不能在 Playground 中连接,所以它编译然后崩溃,因为它们不是)...

let menu = NSMenu()
let item = NSMenuItem()
item.view = AllCurrencyList() //'()' instantiates

(item.view as! AllCurrencyList).allccytext.stringValue = "foo"
(item.view as! AllCurrencyList).allccyimage.image = NSImage(named: "foo")