macos - Swift 中的自定义 NSmenuitem

标签 macos swift nsmenu

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

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: unwrappingly found nil while unwrapping an Optional value on (item.view as!AllCurrencyList).allccytext.stringValue = "foo" .

为了修复它,我必须在我的主 Storyboard中创建我的自定义 View ,并创建一个 IBoutlet 来引用我正在从中创建 NSMenu 的类中的 View 。我仍然不明白为什么我不能使用我在不同的 Storyboard文件中创建的 View 。对于遇到相同问题的任何人,this was of great help.

最佳答案

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

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

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

但是 item.view 仍然是一个严格的 NSView,所以你还需要将 item.view 转换为你的子类,并且你需要确保两个 @IBOutlet 正确连接(我不能在 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")

关于macos - Swift 中的自定义 NSmenuitem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32591574/

相关文章:

ios - 如何使用不接受实时输入的 CoreML 在 Swift 中创建一个简单的相机应用程序?

objective-c - NSTextfield + NSMenu 和第一响应者

swift - 如何使 NSMenuItem 变灰?

objective-c - Cocoa:源列表数据上的上下文菜单 - 不是标题

swift - Mac的屏幕共享状态

java - 为什么不经常将 Java 变量声明为 `final`?在 swift 中比较 let 关键字

macos - 如何在 OS X 上升级 *console* 版本的 vim?

javascript - 如何更改 JavaScript 中日期选择的语言?

macos - cocoa 脚本 : Returning "null" vs. "missing value"

c++ - 无法在 Mac 上使用 Quantlib 运行示例代码