Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何正确设置NSTableHeader的背景色?_Swift_Cocoa_Subclass_Background Color_Nstableview - Fatal编程技术网

Swift 如何正确设置NSTableHeader的背景色?

Swift 如何正确设置NSTableHeader的背景色?,swift,cocoa,subclass,background-color,nstableview,Swift,Cocoa,Subclass,Background Color,Nstableview,我花了最后一天的时间在互联网上搜索如何设置NSTableHeaderCell的背景色。我所取得的成就是: func tableView(_ numberTableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { if tableColumn!.identifier == "description" { let cell = NSTableH

我花了最后一天的时间在互联网上搜索如何设置NSTableHeaderCell的背景色。我所取得的成就是:

func tableView(_ numberTableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

        if tableColumn!.identifier == "description" {

            let cell = NSTableHeaderCell()
            cell.title = "Header Title"
            cell.backgroundColor = NSColor.red
            cell.drawsBackground = true
            cell.isBordered = false
            cell.font = NSFont(name: "System", size: 13)
            tableColumn!.headerCell = cell
        }
        return nil
    }
结果如下所示:

我尝试将字体更改为
NSFont(名称:“Helvetica”,大小:26)
,然后在应用程序启动后,它看起来像:

但在第一次单击单元格后,单元格会再次变小:

我想知道是否有一种方法可以设置整个单元格的背景色,而不会在单击后变小。我还尝试将NSTableHeaderView子类化,但这只是绘制整个HeaderView,无法设置更多标题。这将是一个很大的帮助,以获得一些想法

编辑:

根据建议的答案,我尝试将NSTableHeaderCell子类化并设置:
tableColumn?.headerCell=MyHeaderCell()

这就是结果:


所以现在整个HeaderView都是彩色的。单击一个单元格,该单元格将再次变为白色。不知何故,我仍然不知道如何更改单元格的真实背景。

为什么要替换
viewForTableColumn
中的标题单元格?可能重复@Willeke我试图执行您先前回答的问题中建议的解决方案。但我就是不知道怎么做才对。我更新了代码,尝试将Headercell子类化。
class MyHeaderCell: NSTableHeaderCell {

    override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
        super.draw(withFrame: cellFrame, in: controlView)
        NSColor.red.set()
        self.backgroundColor = NSColor.red
        NSRectFillUsingOperation(cellFrame, .sourceOver)

    }
}