2017-08-09 55 views
0

我對macOS編程相當陌生,想爲NSToolbarItem實現一個自定義類。每次按下該項目時,我想要更改該類的屬性。下面是一個示例代碼:NSToolbarItem沒有觸發的動作

class CustomToolbarButton: NSToolbarItem 
{ 
    override init(itemIdentifier: String) 
    { 
     super.init(itemIdentifier: itemIdentifier) 
     super.target = self 
     super.action = #selector(reactToPress) 
    } 

    func reactToPress(sender: NSToolbarItem) 
    { 
     toggled_property = !toggled_property 
     print("Item pressed") 
    } 

    private(set) var toggled_property = true; 
} 

此類插入到故事板的工具欄中。我已經確保將身份檢查器中的類說明符更改爲CustomToolbarButton。但是,該操作似乎從未觸發,因爲「按下的項目」從未出現在控制檯輸出中。

我也試着申報「reactToPress」功能在以下幾個方面:

func reactToPress() 
@objc func reactToPress() 
@objc func reactToPress(sender: NSToolbarItem) 

,但仍然沒有成功。

回答

0

嘗試Objective-C的語法兼容

super.action = #selector(reactToPress(_:)) 

func reactToPress(_ sender: NSToolbarItem) 

在斯威夫特4您明確必須添加@objc屬性

@objc func reactToPress(_ sender: NSToolbarItem) 
+0

Thx的建議。很遺憾沒有結果。我不知道它是否重要,但我使用了Swift 4 – KO70

+0

我更新了答案。但是Swift 4很可能是'init(itemIdentifier'方法不能用'String'參數。 – vadian

+0

我在init方法中添加了一個控制檯輸出,並且它被觸發了,但是即使添加了@objc,action函數 – KO70