Cocoa:如何将布尔属性绑定到NSCellStateValue?

时间:2012-06-25 17:00:22

标签: cocoa state cocoa-bindings nstextfield nsvaluetransformer

我想将enabled的布尔NSTextField属性绑定到NSButton的状态。我之前已尝试添加自定义NSValueTransformer,将NSButton的状态转换为NSNumber。但是,在该场景中,由于某种原因,文本字段始终处于禁用状态。我的第二种方法:由于NSValueTransformer不提供返回原语类型,例如BOOL,因此错误也会失败。

示例:
屏幕截图显示了禁用文本字段的示例,因为该复选框具有状态NSOnState。我也想将标签绑定到这种状态。

Disabled text fields

此外,如果我能在Interface Builder 中设置“禁用文本”,那将会很方便。在上面的例子中,我在关联的类中设置了文本。


修改

我将self.anonymousLoginCheckbox.state设置为帐户文本字段的已启用属性的模型密钥路径。类似于密码文本字段。但是,工作。

Interface Builder Binding


更新

我创建了一个由Nicolas Bachschmidt友情描述的example project available on GitHub showing the implementation

1 个答案:

答案 0 :(得分:14)

对于密钥NSButton

state不符合KVO标准。 Cocoa Bindings要求观察对象在观察到的属性发生变化时发出通知。由于NSButton的{​​{1}}只是其单元格state的包装器,因此当用户点击按钮时,不会调用state方法(以及自动KVO通知)但是-[NSButton setState:]是。如果您将模型密钥路径设置为-[NSCell setState:],它将起作用。