【问题标题】:Binding selected radiobox to enabling checkbox in Cocoa将选定的单选框绑定到 Cocoa 中的启用复选框
【发布时间】:2012-03-10 03:07:57
【问题描述】:
我以前没有经常使用 Cocoa 绑定,所以在这里我需要一点帮助。
我有一个带有三个按钮和一个复选框的单选按钮组 (NSMatrix)。
我希望仅在选择最后一个单选按钮时启用该复选框。
在网上找到一个教程,建议将单选按钮组的选定标记属性绑定到复选框的启用属性。最后一个单选按钮的标签必须为 1,其他单选按钮的标签必须为 0。
这很好用。
问题是,如果复选框被选中并且单选按钮选择被更改,它会保持选中状态,尽管它没有被启用。我希望该框在变为禁用状态时未被选中。
任何建议将不胜感激!
提前致谢!
有什么方法可以在没有任何代码的情况下实现这一点?
【问题讨论】:
标签:
xcode
cocoa
binding
interface-builder
cocoa-bindings
【解决方案1】:
我怀疑没有代码就可以做到这一点。
我在模型中使用 KVO 处理这个问题。代码如下所示:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([@"checkWithInProcess" isEqualToString:keyPath]) {
NSNumber *oldValue = [change objectForKey:NSKeyValueChangeOldKey];
NSNumber *newValue = [change objectForKey:NSKeyValueChangeNewKey];
BOOL oldValueAsBool = (oldValue != (id)[NSNull null]) && oldValue.boolValue;
BOOL newValueAsBool = (newValue != (id)[NSNull null]) && newValue.boolValue;
if (oldValueAsBool && !newValueAsBool) {
// Save the value
savedRecordValueWithInProcess = self.recordValueWithInProcess;
self.recordValueWithInProcess = nil;
} else if (!oldValueAsBool && newValueAsBool) {
// Restore the value or set it to the default
if (savedRecordValueWithInProcess)
self.recordValueWithInProcess = savedRecordValueWithInProcess;
else
self.recordValueWithInProcess = [NSNumber numberWithBool:NO];
savedRecordValueWithInProcess = nil;
}
}
}
在初始化期间:
[self addObserver:self
forKeyPath:@"checkWithInProcess"
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
context:[Characteristic class]];