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 绑定要求被观察对象在被观察属性发生变化时发出通知。由于NSButton
的state
只是其单元格state
的包装器,所以-[NSButton setState:]
方法(和自动KVO 通知)在用户单击按钮时不会被调用(但-[NSCell setState:]
是)。如果将模型密钥路径设置为self.anonymousLoginCheckbox.cell.state
,则可以使用。
【讨论】:
以上是关于Cocoa:如何将布尔属性绑定到 NSCellStateValue?的主要内容,如果未能解决你的问题,请参考以下文章