使用KVO绑定到布尔属性的负数

时间:2014-01-20 22:22:44

标签: cocoa cocoa-bindings key-value-observing

我正在使用KVO观看复选框,并根据复选框的状态启用或禁用详细信息输入区域。 (即,如果选中该复选框,则启用详细信息区域,否则不启用)类似于:

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

我的问题是,现在我想将此更改为设置detailInputArea的{​​{1}}属性,以显示/隐藏视图,具体取决于复选框的状态。问题是这需要逆逻辑。换句话说,将hidden设置为true表示视图已启用(可以接受输入),而false表示不能。但是,enabled,为true表示视图已隐藏,否则为false。显然这不起作用,因为当选中复选框时,视图会隐藏自身(其hidden,属性为true)。

有什么方法可以根据它正在观看的属性的反转来改变这种绑定行为,和/或是否有更好的方法来完成我在这里尝试做的事情?

2 个答案:

答案 0 :(得分:14)

是的,这是选项字典的一部分。键值绑定允许绑定值在设置之前通过NSValueTransformer进行转换,您可以在绑定选项中指定转换器。

NSValueTransformer课程提供some default, named transformers。在这种情况下,您会对NSNegateBooleanTransformerName感兴趣。

因此,您想要的绑定将如下所示:

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

答案 1 :(得分:2)

Swift 3 中的<{3}}:

detailInputArea.bind(NSHiddenBinding,
                     to: self,
                     withKeyPath: #keyPath(enabledCheckbox),
                     options: [NSValueTransformerNameBindingOption: NSValueTransformerName.negateBooleanTransformerName])