选择NSRuleEditor标准时执行操作

时间:2016-12-16 06:46:39

标签: macos cocoa nsruleeditor

如何确定NSPopUpButton的{​​{1}}菜单中选择的条件?在NSRuleEditor

我可以跟踪每行的条件并手动处理更改,但似乎应该有一种更简单的方法。

我尝试在规则编辑器的委托中为标准ruleEditorRowsDidChange(_:)返回NSMenuItem而不是String;然后在菜单项上设置目标和操作属性。这允许我在规则编辑器中选择菜单项(标准)时调用一个方法。这也意味着我知道哪个标准触发了动作方法,因为每个菜单项的目标都是标准本身。但是,在菜单项上设置目标和操作属性会覆盖规则编辑器在菜单项上设置的私有目标和操作值。这意味着在规则编辑器中选择标准后,我设置的目标/操作将触发,但选择更改不会反映在规则编辑器中。

我目前的解决方案是返回value作为标准' NSPopUpButton(因为它继承自displayValue)并管理按钮的项目和目标/手动操作。这样做效果很好,但感觉它有点破坏规则编辑器的设计,只需要一个标准来管理多个值,而不是依赖于规则编辑器的委托。

我是以错误的方式来做这件事的吗?在规则编辑器中选择条件时,是否有更简单的方法来运行特定于条件的代码?

谢谢!

1 个答案:

答案 0 :(得分:1)

设置菜单项的操作,并在规则编辑器的操作调用- (void)setCriteria:(NSArray *)criteria andDisplayValues:(NSArray *)values forRowAtIndex:(NSInteger)rowIndex内刷新该行。您可以使用- (NSInteger)rowForDisplayValue:(id)displayValue获取行。