【发布时间】:2019-05-03 06:55:48
【问题描述】:
我正在 Mac 上处理现有的 Swift/Objective-C 项目,并且正在使用代码创建一些 UI。我基于 NSTableView 中的选择启用了一个按钮,我使用 NSArrayController 管理 而不(出于某种原因)。
我在MyController 上有一个属性selectionIndexes:
@objc var selectionIndexes : IndexSet = IndexSet()
我不确定是否需要 @objc 才能使其对 Cocoa Bindings 系统可见。
我使用以下方法连接按钮的enabled 绑定:
newButton.bind(NSBindingName.enabled, to: MyController.sharedInstance,
withKeyPath: "selectionIndexes",
options: [NSBindingOption.valueTransformer : MyTransformer()])
这很好用,使用正确的属性调用转换器并正确设置启用,但对选择的更改不会触发绑定,因此按钮保持禁用状态。
我必须明确告诉系统我正在更改值,例如
self.willChangeValue(for: \.selectionIndexes )
self.selectionIndexes = proposedSelectionIndexes
self.didChangeValue(for: \.selectionIndexes)
这似乎很蹩脚。有更好的方法吗?
【问题讨论】:
标签: swift macos cocoa cocoa-bindings