2011-04-15 43 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

相关问题