2012-02-19 16 views
2

私はこれまでCocoaバインディングを扱っていませんでしたので、少し助けが必要です。Cocoaのチェックボックスを有効にするためにラジオボックスを選択しました

私は3つのボタンと1つのチェックボックスを持つラジオボタングループ(NSMatrix)を持っています。 最後のラジオボタンが選択されている場合にのみチェックボックスを有効にします。

ラジオボタングループの選択したタグプロパティをチェックボックスの有効なプロパティにバインドすることを推奨するチュートリアルがオンラインで見つかりました。最後のラジオボタンは1のタグを持つ必要があり、他のタグは0のタグを持つ必要があります。 これは素晴らしい動作です。

問題は、チェックボックスをオンにしてラジオボタンの選択を変更すると、有効になっていないにもかかわらずチェックされたままです。私は、ボックスが無効状態に変わったときにチェックが外されることを望むでしょう。

アドバイスありがとうございます。 ありがとうございます!

コードなしでこれを達成する方法はありますか?

答えて

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]]; 
コードは次のようになります
関連する問題