在我的小程序的“偏好设置”窗口中,我可以选择,用户可以更改时间值的小数位。
此时间值以秒,分钟,小时或天为单位,或者由应用程序自动设置(即,如果时间超过60秒将显示分钟,如果时间超过3600秒则显示小时)。时间值由用户选择。
用户可以使用NSPopUpButton将小数位从1dp更改为4dp。但是,如果时间值为“自动”,那么我想禁用小数位弹出按钮。 picture值一千字。
为实现这一点,我一直在使用CocoaBindings和一个ValueTransformer
子类。 ValueTransformer
仅查看弹出的时间值的indexOfSelectedItem
,如果索引为0(自动),则将弹出的小数位设置为禁用。
这是设置绑定的代码:
decimalPlacesPopUp.bind(.enabled, to: timeBlocksPopUp, withKeyPath: "indexOfSelectedItem", options: [NSBindingOption.valueTransformer : transformer, NSBindingOption.continuouslyUpdatesValue : true])
这是ValueTransformer
中的代码:
override func transformedValue(_ value: Any?) -> Any? {
return value as? Int != 0
}
当首选项窗口首次显示时,这些值正是根据我在上面所写内容得出的。问题是,尽管将NSBindingOption
设置为true,小数位数仍会连续弹出does not update。
我假设这与使用值转换器有关,因为上面有一段代码,它会根据是否选中了另一个不相关的复选框来禁用相同的popUp,并且其工作正常:
decimalPlacesPopUp.bind(.enabled, to: checkbox, withKeyPath: "cell.state", options: [NSBindingOption.continuouslyUpdatesValue : true])
我仍然是CocoaBindings
的新手,所以这可能是完全错误的方法,但是我很感谢任何人提供的指导!