2014-01-20 19 views
7

我正在使用KVO觀看複選框,並根據複選框的狀態啓用或禁用細節輸入區域。 (即,如果該複選框被選中,在細節方面功能,否則不)喜歡的東西:使用KVO綁定到布爾屬性的負數

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

我的問題是,現在我想改變這個,而不是設置detailInputAreahidden屬性,來顯示/根據複選框的狀態隱藏視圖。問題是這需要反邏輯。換句話說,當設置其真實意味着enabled,意味着視圖啓用(可以接受輸入),而虛假意味着它不能。但是,hidden,爲true意味着隱藏視圖,否則爲false。顯然,這是行不通的,因爲當複選框被選中時,視圖會自動隱藏(其enabled屬性爲true)。

有沒有什麼辦法可以改變這種綁定行爲的基礎上,它正在觀看的財產的逆,和/或有更好的方式來完成我在這裏嘗試做什麼?

回答

12

是的,這是選項字典的一部分。鍵值綁定允許通過NSValueTransformer將綁定值轉換,然後您可以在綁定選項中指定轉換器。

NSValueTransformer類提供some default, named transformers。在這種情況下,您會對NSNegateBooleanTransformerName感興趣。

因此,結合你想要的樣子:

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

唉,我討厭像''NSValueTransformerNameBindingOption用'NSValueTransformerBindingOption'困惑的事情。很多時候,在這樣的時候,我...想去看看...爲我的槍。 –

1

這裏的Josh Caswell's answer斯威夫特3

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