Настроить заголовок NSTableView, цвет фона, удалить границу - PullRequest
0 голосов
/ 21 января 2019

Мне нужно добавить цвет фона, изменить шрифт заголовка и удалить границу в моих заголовках 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 голосов
/ 21 января 2019

Сначала вы должны назначить свой собственный 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)
    }

Конечно, вы можете использовать жестко закодированные атрибуты или атрибуты, предоставленные ячейкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...