2011-03-28 49 views
3

我有關於subclassed NSCells(複選框單元格)的問題。我希望他們在複選標記旁邊有一個標題和一個副標題(所以我爲這些創建了NSString屬性)。它們的值應通過綁定來設置(來自IB將是可怕的),但這裏出現問題:可可綁定和自定義NSCell屬性

IB只允許我設置單元格的「值」,在我的情況下爲check check狀態的BOOL。

什麼類必須綁定到服務數據的NSArrayController? 這似乎是細胞本身不能被綁定到任何東西,做這樣的事情

[self.subtitle bind:...] 

都不能工作。何時何地必須進行約束?

最佳,斯特凡

回答

0

我會假設你在基於細胞的NSTableView的這樣做,因爲NSButtonCell確實暴露出title約束力,但它是在一個NSTableView的情況下沒用,因爲你必須綁定NSTableColumn,只暴露了包含NSButtonCells的NSTableColumns的Value綁定。這是該框架的一個缺點,谷歌顯示,許多人都在努力解決這個問題。

對此的一種方法是更新-tableView:dataCellForTableColumn:row:-tableView:willDisplayCell:forTableColumn:row:委託方法中模型的標題。這具有在底層模型改變時不通過KVO更新的缺點。如果這是你的應用程序非常重要,一個解決方法是使該複選框依賴於複選框的title模型的keyPath的value模型的keyPath。這樣一來,當標題改變,志願將發送通知的變化值,這將導致該行被重新繪製,從而標題將通過委託方法進行更新。

我注意到這個問題是舊的,但更簡單的方法,這些天是使用基於的NSView-NSTableViews。當這樣做時,你正在使用一流的NSButton控件,同時提供Value和Title綁定(以及其他一些控件)。這通常是一種更可行的方法,假設您不擔心在Lion之前支持操作系統版本。