我正在使用KVO观看复选框,并根据复选框的状态启用或禁用详细信息输入区域。 (即,如果选中该复选框,则启用详细信息区域,否则不启用)类似于:
[self.detailInputArea bind:@"enabled" toObject:self withKeyPath:@"enabledCheckbox" options:nil];
我的问题是,现在我想将此更改为设置detailInputArea
的{{1}}属性,以显示/隐藏视图,具体取决于复选框的状态。问题是这需要逆逻辑。换句话说,将hidden
设置为true表示视图已启用(可以接受输入),而false表示不能。但是,enabled,
为true表示视图已隐藏,否则为false。显然这不起作用,因为当选中复选框时,视图会隐藏自身(其hidden,
属性为true)。
有什么方法可以根据它正在观看的属性的反转来改变这种绑定行为,和/或是否有更好的方法来完成我在这里尝试做的事情?
答案 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])