我之前没有使用Cocoa绑定很多,所以在这里我需要一些帮助。

我有一个带有三个按钮和一个复选框的单选按钮组(NSMatrix)。
我希望仅在选择最后一个单选按钮时才启用复选框。

在线找到了一个教程,建议将单选按钮组的选定标签属性绑定到复选框的enabled属性。最后一个单选按钮的标签必须为1,其他单选按钮的标签应为0。
这很好。

问题是,如果选中该复选框并且更改了单选按钮选择,则即使未启用该复选框,它也会保持选中状态。我希望当该框更改为禁用状态时,不要选中该框。

任何建议将不胜感激!
提前致谢!

任何没有任何代码的方法来实现这一目标?

最佳答案

我怀疑没有代码就可以做到这一点。

我在模型中使用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]];

关于xcode - 将选定的单选框绑定(bind)到 cocoa 中的启用复选框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9349896/

10-12 17:51