2014-01-20 14 views
7

私はKVOを使用してチェックボックスを表示し、チェックボックスの状態に基づいて詳細入力エリアを有効または無効にします。 (つまり、チェックボックスがチェックされている場合は、詳細領域が有効になっている、そうでない場合ではない)のようなもの:KVOでブール値プロパティの否定にバインドする

[self.detailInputArea bind:@"enabled" toObject:self withKeyPath:@"enabledCheckbox" options:nil]; 

は私の問題は/表示するために、今私が代わりにdetailInputArea年代hiddenプロパティを設定するには、これを変更したいということですチェックボックスの状態に応じてビューを非表示にします。問題はこれが逆論理を必要とすることである。つまり、enabled,をtrueに設定すると、ビューが有効(入力可)であることを意味し、falseは不可能であることを意味します。ただし、hidden,の場合は、ビューが非表示であることを意味し、そうでない場合はfalseです。明らかに、これは機能しません。チェックボックスがチェックされているときにそのビューが隠れるためです(そのenabledプロパティはtrueです)。

このバインディングを、見ているプロパティの逆に基づいて動作させる方法はありますか?また、ここでやろうとしていることを達成するためのより良い方法がありますか?

答えて

12

はい、これはオプション辞書の対象です。キー値バインディングでは、バインドされた値が設定される前にNSValueTransformerで変換され、バインディングのオプションにトランスフォーマを指定できます。

NSValueTransformerクラスは、some default, named transformersを提供します。この場合は、NSNegateBooleanTransformerNameに興味があります。したがって

したいバインディングは次のようになります。

[self.detailInputArea bind:@"hidden" 
        toObject:self 
       withKeyPath:@"enabledCheckbox" 
        options:@{NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName}]; 
+1

うわ、私はNSValueTransformerBindingOption' 'と' NSValueTransformerNameBindingOption 'のような紛らわしいものを嫌います。そのような時に私は...見に行きたいです...私の銃のために。 –

1

ここスウィフト3Josh Caswell's answerです:

detailInputArea.bind(NSHiddenBinding, 
        to: self, 
        withKeyPath: #keyPath(enabledCheckbox), 
        options: [NSValueTransformerNameBindingOption: NSValueTransformerName.negateBooleanTransformerName]) 
関連する問題