基于视图的NSTableView / NSOutlineView和isGroupItem

时间:2012-01-01 22:02:11

标签: cocoa nstableview nsview nsoutlineview

我有一个基于视图的NSOutlineView绑定到NSTreeController。在我的委托中实现outlineView:isGroupItem:方法之前,一切似乎都正常工作,然后组头突然停止显示。喜欢这个

enter image description here

我确认如果我要将NSOutlineView更改为基于单元格,则组项目会正确显示。 NSTableView也观察到类似的行为。还有其他人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:12)

解决了!

原来我必须在NSOutlineView委托

中实施以下方法
- (NSView *)outlineView:(NSOutlineView *)outlineView 
     viewForTableColumn:(NSTableColumn *)tableColumn
                   item:(id)item {
    if ([self outlineView:outlineView isGroupItem:item]) {
        NSString *vId = [[[outlineView tableColumns] objectAtIndex:0] identifier];
        return [outlineView makeViewWithIdentifier:vId owner:self];
    }
    return [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self];
}

显然,默认情况下,基于NSOutlineView的视图通过查找与列具有相同标识符的视图为表中的每个单元格生成视图。但是,对于组项/组行,没有与该行关联的tableColumm,因此视图结果为零并且不显示。

玩苹果的TableViewPlayground sample project真的很有帮助!强烈推荐!