Сначала вы должны назначить свой собственный 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)
}
Конечно, вы можете использовать жестко закодированные атрибуты или атрибуты, предоставленные ячейкой.