自定义NSTableView标头,背景色,删除边框

时间:2019-01-21 14:17:00

标签: swift macos cocoa nstableview

我需要添加背景色,更改标题字体并删除NSTableView标头上的边框。

我用红色绘制了一个背景,并调整了页眉的高度大小,但是我找不到更多自定义它的方法。这就是我所能实现的:

override func viewDidLoad() {
    super.viewDidLoad()
    myTable.tableColumns[0].headerCell = CustomHeaderCell()
    myTable.headerView?.frame.size.height = 50
}


class CustomHeaderCell: NSTableHeaderCell {
    override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
    super.draw(withFrame: cellFrame, in: controlView)
    controlView.layer?.backgroundColor = NSColor.red.cgColor
}

}

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,您需要将自定义NSTableHeaderCell分配给NSTableView的每个单元格。 这可以在NSTableView的子类(如下所示)或View控制器(viewDidLoad)中完成

override func awakeFromNib() {

    for column in self.tableColumns{
        column.headerCell = HeaderCell(textCell: column.headerCell.stringValue)
    }
}

在自定义NSTableHeaderCell中,您可以覆盖func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView)以自定义图形和文本。

    override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {

    NSColor.green.set()

    let rect = NSRect(x: cellFrame.origin.x, y: cellFrame.origin.y - 3, width: cellFrame.size.width - 2, height: cellFrame.size.height + 10)
    NSBezierPath(rect: rect).fill()

    let str = NSAttributedString(string: stringValue, attributes:
        [NSAttributedString.Key.foregroundColor: NSColor.red,
         NSAttributedString.Key.font: NSFont(name: "Skia", size: 14)])

    str.draw(in: cellFrame)

}

要自定义其他单元格绘制(如边框)​​,您也可以覆盖func draw(withFrame cellFrame: NSRect, in controlView: NSView)

   override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
        self.drawInterior(withFrame: cellFrame, in: controlView)
    }

当然,您可以使用硬编码属性或单元格提供的属性。