macOS:将Swift属性公开给Cocoa绑定的正确方法

弗兰克·R。

我正在Mac上现有的Swift / Objective-C项目中工作,并且正在用代码创建一些UI。我启用了一个基于我管理的NSTableView中的选择的按钮,而无需使用NSArrayController(出于某些原因)。

我有一个属性selectionIndexesMyController

@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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章