2011-12-18 67 views
0

根據Apple's documentation,NSOutlineView要求視圖中的每個項目都是唯一的,但是,如果這實際上不符合業務需求呢?特別是,你如何顯示這樣的東西NSOutlineView中的非唯一項目

Item A 
    -> Item B 
     -> Item E 
    -> Item C 
Item D 
    -> Item B 
     -> Item E 
    -> Item F 

請注意項目B及其子項如何多次出現在樹中。當然,應用程序會進行檢查以確保不會發生循環循環,因此樹是有限的。

會繼承NSOutlineView的幫助嗎?或者是否需要創建一個全新的視圖類?

+0

我假設你的意思是「項目B」的兩個實例都是同一個對象,一直到項目A和項目D擁有的指針相等。 – 2011-12-18 06:40:18

+0

是的,沒錯。對象坦然地形成一個圖形而不是一個線性樹。 – Tony 2011-12-18 15:50:26

回答

1

您可以使用NSIndexPath對象作爲大綱視圖中的項目。例如,索引路徑(0,0)將引用項目A的項目B,而索引路徑(1,0)將引用項目D的項目B.

您將無法使用綁定;你需要實現一個數據源。

您的數據源方法需要使用索引路徑從模型中獲取相關的真實模型對象。我建議製作一種方法,並使用所有數據源方法中的方法。

另外,您需要正確處理刪除對象:如果刪除模型數組中間的對象,則必須刪除末尾的索引路徑,即而不是中間的那個,以及告訴視圖重新加載中間的所有項目(索引路徑)。

+0

也許NSIndexPath的子類可以通過代理屬性來允許使用綁定?這聽起來像一個好方法嗎? – Tony 2011-12-18 15:55:00

+0

NSTreeNode呢?我正在閱讀文檔,看起來這樣的任務恰到好處,但我仍在嘗試如何使用它。 – Tony 2011-12-18 21:39:26

+0

@Tony:看起來很完美!你應該做出答案。 – 2011-12-18 22:25:35