NSTableView - 更改GroupRow样式

时间:2017-07-06 08:56:35

标签: swift xcode macos cocoa nstableview

我试图模仿MacOS联系人应用程序在我自己的应用程序中与GroupRows做什么,但无法找出或找到如何摆脱组行上方和下方的行。我尝试添加自己的自定义NSTableRowView,可以毫无问题地更改背景颜色,但不知道如何摆脱这些边界。

The lines above and below the D & L

This is from the contacts app

2 个答案:

答案 0 :(得分:1)

此外,如果您正确设置了isGroupRow,我们可以省略自定义变量isGroupRowStyle,而使用内置[self tableView:tableView isGroupRow:row]

下面的Swift代码段创建了一个浮动的分组样式表视图行-看起来很像Finder。其中isGroupRowStyle区分普通行和组行;当群组行未锚定在表格视图顶部时,isFloating为true;覆盖drawBackground(in:)会删除包裹在组行周围的分隔符。

class TableRowView: NSTableRowView {

    override func draw(_ dirtyRect: NSRect) {
        guard isGroupRowStyle && isFloating else {
            return super.draw(dirtyRect)
        }

        NSColor.gridColor.setFill()
        dirtyRect.fill()
    }

    override func drawBackground(in dirtyRect: NSRect) {
        // do not draw
    }
}

答案 1 :(得分:0)

子类NSTableRowView。然后在子类中添加一个属性,如下所示:

@interface CustomTableRowView : NSTableRowView

@property (nonatomic, assign) BOOL isGroupRow;

@end

覆盖子类中的drawRect:

- (void)drawRect:(NSRect)dirtyRect {
    if (!self.isGroupRow)
        [super drawRect:dirtyRect];
}

然后在tableView:rowViewForRow中,设置isGroupRow:

tableRow.isGroupRow = [self tableView:tableView isGroupRow:row];

这将删除组行的顶部和底部分隔符。对不起,我不知道Swift,但你很可能很容易翻译它。希望它有所帮助!