我正在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()])
这可以正常工作,使用正确的属性调用了转换器,并且正确设置了enabled,但是更改选择不会触发绑定,因此按钮保持禁用状态。
我必须明确告诉系统我正在更改值,例如
self.willChangeValue(for: \.selectionIndexes )
self.selectionIndexes = proposedSelectionIndexes
self.didChangeValue(for: \.selectionIndexes)
这似乎很la脚。有更好的方法吗?
@objc
是将属性公开给Objective-C运行时所必需的。
要使属性键值遵守标准,您必须添加dynamic
关键字
@objc dynamic var selectionIndexes = IndexSet()
并删除...ChangeValue(for
行
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句