使用价值转换器的可可绑定不会持续更新

时间:2019-07-12 10:52:01

标签: swift macos cocoa-bindings

在我的小程序的“偏好设置”窗口中,我可以选择,用户可以更改时间值的小数位。

此时间值以秒,分钟,小时或天为单位,或者由应用程序自动设置(即,如果时间超过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的新手,所以这可能是完全错误的方法,但是我很感谢任何人提供的指导!

0 个答案:

没有答案