2015-09-15 66 views
2

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

class AllCurrencyList: NSView { 

    @IBOutlet var allccyimage: NSImageView! 

    @IBOutlet var allccytext: NSTextField! 

} 

我已创建了上面,但我挣扎在我的菜单使用它提到的两个IBOutlet一个厦门国际银行。这里是我想要做的事:

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") 

大多数我已经找到了教程在目标C,而我努力寻找在斯威夫特的例子。

谢谢你的帮助。

编辑

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

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

回答

0

首先,您要指定一个类,而不是类的实例,以item.view - 使用

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

其次,item不具备这些属性allccytextallccyimage - item是NSMenuItem。您需要为您的值分配item.view.allccytext.stringValueitem.view.allccyimage.image

item.view仍然是严格意义上的NSView,所以你还需要投item.view你的子类,你需要确保这两个@IBOutlet s的连接正确(这是我不能在游乐场,所以它和编译然后崩溃'因为他们不是)...

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") 
+0

谢谢你,虽然我得到一个错误:'价值的类型'NSView?'?当我尝试使用'item.view.allccytext.stringValue'时,没有成员'allccytext''给了什么? – anto0522

+0

查看更新以回答... – Grimxn

+0

谢谢你,现在我得到一个错误'致命的错误:意外地发现零,同时解开一个可选值'(item.view as!AllCurrencyList).allccytext.stringValue =“foo” '我检查了我的IBoutlets已正确链接,他们是... – anto0522