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

Posted

技术标签:

【中文标题】Cocoa:如何将布尔属性绑定到 NSCellStateValue?【英文标题】:Cocoa: How to bind a boolean property to NSCellStateValue? 【发布时间】:2012-06-25 17:00:22 【问题描述】:

我想将NSTextField 的布尔值enabled 属性绑定到NSButton 的状态。我已经尝试添加自定义NSValueTransformer,将NSButton 的状态转换为NSNumber。但是,在这种情况下,由于某种原因,文本字段一直被禁用。我的第二种方法:To bad 也失败了,因为 NSValueTransformer 不提供返回原语类型,例如 BOOL

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

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


编辑:

我将self.anonymousLoginCheckbox.state 设置为帐户文本字段的enabled 属性的模型键路径。密码文本字段类似。但是,它不起作用


更新:

我创建了一个 example project available on GitHub showing the implementation,由 Nicolas Bachschmidt 亲切地描述。

【问题讨论】:

【参考方案1】:

NSButton 对于密钥 state 不兼容 KVO。 Cocoa 绑定要求被观察对象在被观察属性发生变化时发出通知。由于NSButtonstate 只是其单元格state 的包装器,所以-[NSButton setState:] 方法(和自动KVO 通知)在用户单击按钮时不会被调用(但-[NSCell setState:] 是)。如果将模型密钥路径设置为self.anonymousLoginCheckbox.cell.state,则可以使用。

【讨论】:

以上是关于Cocoa:如何将布尔属性绑定到 NSCellStateValue?的主要内容,如果未能解决你的问题,请参考以下文章

避免将任何数字绑定到布尔属性

将用户控件绑定到布尔属性的对面

WPF Radiobutton(二)(绑定到布尔值)

Cocoa NSTextField - 绑定和设置属性

Silverlight 如何将属性绑定到列表项值

如何将不同类中的两个 Switch 控件绑定到同一个 bool 属性?