2009-05-28 63 views
0

比方說,我有一個具有高度和寬度屬性的大小類(實際上類比這更復雜一點,但大小是一個很好的例子)。什麼是最好的方式來添加一個複合材料綁定到一個現有的類

我想在我的UI中顯示爲$ width x $ height。

這樣做的一個顯而易見的方法是綁定到一個尺寸屬性,該屬性取決於寬度和高度。

我的問題是哪裏是最好的地方添加這個新的屬性?

我可以將它添加到模塊中的Size類本身,但如果另一個控制器想要顯示不同的字符串,我會卡住創建另一個屬性。我也有點不情願這樣做,因爲在我的情況下,Size類是在一個框架中,將在兩個不同的地方使用(儘管可能全部來自我控制的代碼)。

我可以將它添加到包含視圖/控制器的項目中的Size類的類中,因此它只會在我知道它將被使用的地方可用,但在各個地方我已經看到了類的建議往往被過度使用,並被迫想知道這是否是這種情況之一。

在單個Size實例的情況下,我可以在包含它的控制器類中創建屬性,但是當您有一個尺寸數組時,這會變得更加困難。

我可以綁定到整個大小的對象,並使用一個轉換器將它們轉換爲字符串,但綁定到一個數組的大小會導致你必須將數組的每個元素轉換成一個新的數組在變換器中,這看起來有點難看。

回答

4

如果要將此複合值顯示爲字符串,則將文本字段的「顯示樣式1」綁定到width屬性,將「顯示樣式2」(在綁定顯示樣式1時顯示)綁定到height屬性。在顯示模式1綁定中,將「顯示模式」設置爲%{value1}@ x %{value2}@(是的,稍微不直觀的語法)。這將顯示一個顯示「[寬度] x [高度]」的文本字段,並將更新任一屬性中的更改。

您可以使用NSTextFieldCell(例如,作爲NSTableColumn中的單元格。此方法的缺點是文本字段將無法編輯綁定的widthheight值。如果你需要編輯它們,你將不得不編寫一個NSValueTransformer。

+0

我其實並不需要這些字段是可編輯的,所以這將是理想的。謝謝! – 2009-05-28 20:51:35

0

我想在我的用戶界面中顯示爲$ width x $ height。

爲什麼不是兩個字段?然後你可以讓它們可編輯。

(現實中的班級比這更復雜一點,但大小也是一個不錯的例子)

上面的假設是不是在你的真實情況是可行的,你可以嘗試創建一個自定義子類的NSFormatter,並將其設置爲單元格上的格式化程序(我認爲這是在表視圖中,因爲您不會將單個控件綁定到數組)。然後,您將綁定到整個Size對象。

1

通過顯示模式使用多個綁定,因爲Barry建議聽起來像是最好的方法,至少不知道更多關於您的UI。過去我使用過相同的東西,我爲一系列圖像構建了一個檢查器,並將尺寸綁定到單個文本字段。

一般來說,如果可以的話,使用值轉換器或格式化程序是一種很好的做法,但在最後的手段中,使用類別沒有任何問題。我過去做過這件事的時候,我遇到了綁定日期的麻煩,但把它分解成單獨的時間和日期片段。類別是一種很好的方法,因爲它可以讓您與模型保持分離,但您不需要像直接綁定到控制器那樣做任何瘋狂的事情。

+0

感謝您的洞察力。 – 2009-05-28 20:51:47

相關問題