【问题标题】:Bind one NSTextField to multiple properties将一个 NSTextField 绑定到多个属性
【发布时间】:2024-01-17 13:26:01
【问题描述】:

我正在尝试在 Inspector 视图中进行多次编辑,我选择了两个对象,我想同时编辑它们的两个 houseName 属性。

class House: NSObject {
    dynamic var houseName: String
}

var house1: House()
var house2: House()

houseNameTextField.bind(.value, to: house1, withKeyPath: "houseName", options: [])

如果我绑定第一个房子,我可以很好地更改属性,但是,我可以将第二个属性绑定到同一个文本字段,所以当我编辑文本字段时,两个属性都会更新?

再次调用 .bind 只会覆盖第一个绑定

【问题讨论】:

  • 您要绑定第二个属性还是要绑定到第二个对象?如果值不同,应该显示哪个值?
  • 我以前见过一次编辑多个属性时,文本字段会显示“多个”,然后您输入的任何值都会覆盖它们

标签: swift multi-select appkit


【解决方案1】:

我找到了一个适合我的解决方案,我需要创建一个 ArrayController 并使用“选择”键,它可以神奇地工作

let options: [NSBindingOption : Any] = [NSBindingOption.validatesImmediately: true,
                                        NSBindingOption.allowsEditingMultipleValuesSelection: true,
                                        NSBindingOption.multipleValuesPlaceholder: "Multiple",
                                        NSBindingOption.nullPlaceholder: "None",
                                        NSBindingOption.conditionallySetsEditable: true]

houseNameTextField.bind(.value, to: arrayController, withKeyPath: "selection.houseName", options: options)

【讨论】:

  • 注意:这是对多个对象的一个​​属性的绑定。不是对多个属性的绑定。