【问题标题】:View-based NSTableView / NSOutlineView and isGroupItem基于视图的 NSTableView / NSOutlineView 和 isGroupItem
【发布时间】:2012-01-01 22:02:10
【问题描述】:

我有一个基于视图的 NSOutlineView 绑定到 NSTreeController。一切似乎都正常工作,直到我在我的委托中实现 outlineView:isGroupItem: 方法,然后组标题突然停止出现。像这样

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

【问题讨论】:

    标签: cocoa nstableview nsview nsoutlineview


    【解决方案1】:

    解决了!

    原来我必须在 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,因此视图结果为 nil 并且不显示。

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

    附录: 在 Interface Builder 中,如果您添加 Source List 对象而不是 Outline View,它将为您添加两个原型视图行。

    允许您设计不同外观的标题和数据行,并通过它们的标识符在代码中引用它们。

    标题单元格: 数据单元:

    您当然也可以手动添加任意数量的原型视图行。

    【讨论】:

    • 为什么outlineView:viewForTableColumn:item:不在official NSOutlineViewDelegate docs
    • 如何删除分组标题分隔线(组标题中顶部和底部的行)?或者我们如何自定义分组的 NSOutlineVIew 标头?
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多