Fra*_* R. 2 macos cocoa cocoa-bindings swift
我正在 Mac 上开发一个现有的 Swift/Objective-C 项目,并在代码中创建一些 UI。我根据我管理的 NSTableView 中的选择启用一个按钮,而不使用 NSArrayController (出于原因)。
selectionIndexes我在 上拥有房产MyController:
@objc var selectionIndexes : IndexSet = IndexSet()
Run Code Online (Sandbox Code Playgroud)
我不确定是否有@objc必要使其对 Cocoa Bindings 系统可见。
我使用以下方式连接按钮的绑定enabled:
newButton.bind(NSBindingName.enabled, to: MyController.sharedInstance,
withKeyPath: "selectionIndexes",
options: [NSBindingOption.valueTransformer : MyTransformer()])
Run Code Online (Sandbox Code Playgroud)
这工作正常,使用正确的属性调用变压器并正确设置启用,但对选择的更改不会触发绑定,因此按钮保持禁用状态。
我必须明确告诉系统我正在更改该值,例如
self.willChangeValue(for: \.selectionIndexes )
self.selectionIndexes = proposedSelectionIndexes
self.didChangeValue(for: \.selectionIndexes)
Run Code Online (Sandbox Code Playgroud)
这看起来很蹩脚。有更好的方法吗?
@objc将该属性公开给 Objective-C 运行时是必要的。
要使属性键值观察兼容,您必须添加dynamic关键字
@objc dynamic var selectionIndexes = IndexSet()
Run Code Online (Sandbox Code Playgroud)
并删除...ChangeValue(for行
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |