Cocoa设计:如何在NSCollectionView中突出显示员工的当前部门?

时间:2011-04-15 11:07:11

标签: cocoa cocoa-bindings nscollectionview

我有这个核心数据支持的数据库,其中包含许多员工示例中的条目: 员工可以属于某个部门。一个部门有很多员工。 我有一个NSTableView(由NSArrayController支持)与所有员工。我有一个NSCollectionView(由设置为selection.possibleDepartments的NSArrayController支持),它显示了所选员工的可能部门。

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

我想强调员工目前所在的部门

简单吧?

我如何知道当前所选部门的内容?我创建了一个部门类(DDDepartment)的类别,其中有“ - (BOOL)isThisTheSelectedDepartment”。在这个函数中,我调用app委托给我主阵列控制器。主阵列控制器为我提供了所选的员工。我问选定的员工这是否是他的部门。 有很少的图像和它的隐藏属性必然代表objectObject.isThisTheSelectedDepartment并否定。这不会更新NSCollectionView(显然:P) 有没有办法用绑定做到这一点?

由于

1 个答案:

答案 0 :(得分:0)

如果你想用绑定做,你可以在你的笔尖添加一个NSObjectController。然后在对象控制器上将其内容绑定到employee数组控制器中的选择,并使用keypath @“selectedDepartment”。该对象控制器将始终包含所选员工的部门。

对于DDDepartment,向其添加BOOL“isSelected”属性。

创建NSObjectController的子类。设置在第1部分中创建的NSObjectController以获得其类的子类。现在在子类中覆盖 - (void)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方法。这应该为您处理所有事情,并在您选择员工或更改员工部门时更改部门选择。