我正在Mac上开发一个现有的Swift / Objective-C项目,并且正在用代码创建一些UI。我基于NSTableView中的选择启用了一个按钮,该按钮使用NSArrayController(由于某些原因)无进行管理。
我在selectionIndexes
上有一个属性MyController
:
@objc var selectionIndexes : IndexSet = IndexSet()
我不确定@objc
是否必要,以使其对可可绑定系统可见。
我使用以下方法连接按钮的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)
这似乎很la脚。有更好的方法吗?
答案 0 :(得分:2)
@objc
对于将属性公开给Objective-C运行时是必需的。
要遵守属性键值,您必须添加dynamic
关键字
@objc dynamic var selectionIndexes = IndexSet()
并删除...ChangeValue(for
行