2011-04-15 19 views
0

我有這樣的核心數據支持數據庫,其條目類似於許多員工示例: 員工可以屬於某個部門。一個部門有很多員工。 我有一個NSTableView(由NSArrayController支持)與所有員工。我有一個NSCollectionView(由設置爲selection.possibleDepartments的NSArrayController支持),它向我顯示了所選員工的可能部門。Cocoa Design:如何在NSCollectionView中突出顯示員工的當前部門?

*DDEmployee    
name 
image 
----- 
possibleDepartments <<------ 
selectedDepartment <<--  | 
         | | 
*DDDepartment   | | 
name     | | 
-----     | | 
employees   <---  | 
possibleEmployees <<-------- 

我想強調該部門員工目前在

簡單吧?

我怎麼知道當前選定的部門是什麼?我創建了具有「 - (BOOL)isThisSeSelectedDepartment」的部門類(DDDepartment)的分類。在這個函數中,我調用應用程序委託給我主要的數組控制器。主陣列控制器給我選定的員工。我詢問所選僱員是否屬於他的部門。 有小圖像,其隱藏的屬性必然代表Object.isThisSelectedDepartment並否定。這不會更新NSCollectionView(顯然:P) 有沒有辦法用綁定來做到這一點?

感謝

回答

0

如果你想,你可以添加一個NSObjectController到您的筆尖綁定做到這一點。然後在對象控制器上使用keypath @「selectedDepartment」將其內容綁定到employee數組控制器中的選擇內容。該對象控制器將始終包含選定員工的部門。

對於DDDepartment,爲其添加BOOL「isSelected」屬性。

創建一個NSObjectController的子類。設置您在第1部分中創建的NSObjectController以爲其類創建子類。現在,在子類中覆蓋 - (無效)setContent:(ID)的內容爲:

- (void)setContent:(id)content 
{ 
    [[self content] setIsSelected:NO]; // clear the flag on the current selection 
    [content setIsSelected:YES]; // set the flag on the new selection 

    [super setContent:content]; 
} 

最後改變你的隱藏綁定綁定到IsSelected屬性,而不是你的isThisTheSelectedDepartment方法。這應該照顧你所有的事情,並且每當你選擇一個員工或者改變一個員工的部門時,都會改變部門的選擇。

+0

這聽起來像一個乾淨的方式來做到這一點。我一直試圖遠離將isSelected BOOL添加到我的模型中。但你的答案是我聽到的最乾淨的。謝謝 – david 2011-04-18 05:51:23

相關問題