MacOS 10.12+, Xcode 8+, Swift 3:
Je souhaite personnaliser par programme la police et le dessin d’un en-tête NSTableView. Je sais qu’il ya des questions plus anciennes à ce sujet, mais je n’ai rien trouvé qui puisse fonctionner aujourd’hui.
Par exemple, j'ai essayé de sous-classer NSTableHeaderCell pour définir une police personnalisée:
class MyHeaderCell: NSTableHeaderCell {
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
NSLog("MyHeaderCell is drawing")
font = NSFont.boldSystemFont(ofSize: 12)
super.drawInterior(withFrame: cellFrame, in: controlView)
}
}
Et puis utilisez cette sous-classe dans ma vue de table:
tableColumn.headerCell = MyHeaderCell()
Je vois le message "MyHeaderCell dessine" dans la console, mais la police de l'en-tête de la table ne change pas.
Réponses:
2 pour la réponse № 1Merci aux commentaires de @HeinrichGiesen et@ Willeke, je l'ai fait fonctionner. Je l’affiche ici au cas où cela aiderait une personne en aval. Notez que ma façon de personnaliser la couleur d’arrière-plan n’est pas si flexible. Je ne fais que colorer le dessin par défaut. Il convient assez bien à mes fins.
final class MyHeaderCell: NSTableHeaderCell {
// Customize background tint for header cell
override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
super.draw(withFrame: cellFrame, in: controlView)
NSColor(red: 0.9, green: 0.9, blue: 0.8, alpha: 0.2).set()
NSRectFillUsingOperation(cellFrame, .sourceOver)
}
// Customize text style/positioning for header cell
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
attributedStringValue = NSAttributedString(string: stringValue, attributes: [
NSFontAttributeName: NSFont.systemFont(ofSize: 11, weight: NSFontWeightSemibold),
NSForegroundColorAttributeName: NSColor(white: 0.4, alpha: 1),
])
let offsetFrame = NSOffsetRect(drawingRect(forBounds: cellFrame), 4, 0)
super.drawInterior(withFrame: offsetFrame, in: controlView)
}
}