基于视图的NSOutlineView标题单元格字体问题

时间:2011-08-17 17:46:19

标签: cocoa macos nsoutlineview

我目前正在尝试在我的Cocoa应用程序中使用基于视图的新NSOutlineView。因为我没有使用绑定,所以我在控制器中实现了所有必需的委托和数据源方法。

在界面构建器中,我添加了一个NSOutlineView,突出显示设置为 SourceList ,内容模式设置为基于视图。因此,提供了两个默认表格单元格视图(一个Header单元格,其中 HeaderCell 设置为标识符,一个数据单元格 DataCell 设置为标识符)

这就是界面构建器中的样子,标题单元格视图正确显示灰蓝色 textField ,而数据单元格视图具有图像视图和 textField 正确颜色和字体设置

为了提供视图,我使用以下代码返回DataCell视图或HeaderCell视图,并根据接口构建器中设置的相应标识符相应地设置单元格的textField。

- (NSView *)outlineView:(NSOutlineView *)outlineView 
     viewForTableColumn:(NSTableColumn *)tableColumn 
                   item:(id)item {


    NSTableCellView *result = nil;

    if ([item isKindOfClass:[NSMutableDictionary class]]) {
        result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];

        id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : groupedRoster;
        [[result textField] setStringValue:[[parentObject allKeys] objectAtIndex:0]];


    } else {
        result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];

        [item nickname] ? [[result textField] setStringValue:[item nickname]] : [[result textField] setStringValue:[[item jid] bare]];
    }
    return result;
}

运行所有内容,如下所示。

有人可以向我提供提示吗,为什么标题单元格在选中时既不是粗体,也不是正确的颜色?

2 个答案:

答案 0 :(得分:12)

您需要实现-outlineView:isGroupItem:delegate方法并为标题行返回YES。这将标准化字体并使用右侧的“显示/隐藏”按钮替换左侧的显示三角形。您仍然需要手动大写字符串以获得完整效果。

我不确定上面的组行委托方法是否使选择样式看起来没问题。但是,您通常不希望在源列表中可以选择标题行,您可以通过-outlineView:shouldSelectItem:delegate方法为标题项返回NO。

答案 1 :(得分:2)

我创建了一个包含源列表的示例项目,并使用@ boaz-stuller建议的-outlineView:isGroupItem:方法。

  • 显示项目列表
  • 以主从式方式编辑项目
  • 删除和添加项目
  • 绑定的用法

在github上查看besi/mac-quickies。 大部分内容可以在IB中完成,也可以在AppDelegate

中找到

screenshot