自定义 NSTableView Header、背景颜色、去除边框
Customise NSTableView Header, background color, remove border
我需要在我的 NSTableView headers.
上添加背景颜色、更改标题字体并删除边框
我已经绘制了红色背景并调整了 header 高度大小,但我找不到任何方法来进一步自定义它。这是我所能达到的:
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
}
}
首先,您将自定义 NSTableHeaderCell 分配给 NSTableView 的每个单元格。
这可以在 NSTableView 的子类(如下所示)或视图控制器(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)
}
当然,您可以使用硬编码属性或单元格提供的属性。
我需要在我的 NSTableView headers.
上添加背景颜色、更改标题字体并删除边框我已经绘制了红色背景并调整了 header 高度大小,但我找不到任何方法来进一步自定义它。这是我所能达到的:
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
}
}
首先,您将自定义 NSTableHeaderCell 分配给 NSTableView 的每个单元格。 这可以在 NSTableView 的子类(如下所示)或视图控制器(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)
}
当然,您可以使用硬编码属性或单元格提供的属性。