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

Don*_*urr 9 cocoa key-value-observing cocoa-bindings

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

[self.detailInputArea bind:@"enabled" toObject:self withKeyPath:@"enabledCheckbox" options:nil];
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*ell 15

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

NSValueTransformer类提供了一些默认情况下,命名为变压器.在这种情况下,你会感兴趣的NSNegateBooleanTransformerName.

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

[self.detailInputArea bind:@"hidden" 
                  toObject:self 
               withKeyPath:@"enabledCheckbox" 
                   options:@{NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName}];
Run Code Online (Sandbox Code Playgroud)

  • 呃,我讨厌混淆像“NSValueTransformerNameBindingOption”和“NSValueTransformerBindingOption”这样的东西。很多时候,在这种时候我……想去寻找……我的枪。 (2认同)