【问题标题】: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]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-06
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2015-06-20
      • 2020-06-27
      • 2014-09-18
      相关资源
      最近更新 更多