2016-12-16 51 views
0

如何確定在NSRuleEditorNSPopUpButton菜單中選擇哪個標準?內部ruleEditorRowsDidChange(_:)選擇NSRuleEditor標準時執行操作

我可以跟蹤每行的標準並手動處理更改,但似乎應該有一個更簡單的方法。

我試着在規則編輯器的委託中返回一個NSMenuItem而不是String作爲標準的value;然後在菜單項上設置目標和動作屬性。這允許我在規則編輯器中選擇菜單項(標準)時調用一個方法。這也意味着我知道哪個標準觸發了操作方法,因爲每個菜單項的目標都是標準本身。但是,在菜單項上設置目標和操作屬性會覆蓋規則編輯器在菜單項上設置的私有目標和操作值。這意味着,在規則編輯器中選擇一個條件後,我設置的目標/操作會觸發,但選擇更改不會反映在規則編輯器中。

我目前的解決方案是返回一個NSPopUpButton作爲標準的displayValue(因爲它繼承自NSView)並手動管理按鈕的項目和目標/操作。這個效果很好,但感覺像是通過讓一個標準管理多個值本身而不是依賴規則編輯器的委託來打破規則編輯器的設計)。

我該怎麼做呢?在規則編輯器中選擇標準時,是否有更簡單的方法來運行特定於標準的代碼?

謝謝!

+0

你想執行什麼樣的動作? – Willeke

+0

當在彈出按鈕菜單中選擇相應的名稱時,該動作正在播放/預覽聲音。 – Andrew

回答

1

設置菜單項的動作,並在規則編輯器的動作調用- (void)setCriteria:(NSArray *)criteria andDisplayValues:(NSArray *)values forRowAtIndex:(NSInteger)rowIndex內部刷新行。您可以通過- (NSInteger)rowForDisplayValue:(id)displayValue獲得該行。