2016-12-16 57 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获得该行。