我在使用自定义 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
没有那些属性 allccytext
和 allccyimage
- item
是一个 NSMenuItem。您需要将您的值分配给它们,如 item.view.allccytext.stringValue
和 item.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/