如何更改 NSTableHeaderCell 的字体大小
How to change font size of NSTableHeaderCell
我正在尝试在我的代码中更改 NSTableView 的字体大小,以允许用户根据自己的喜好进行更改。
我成功地更改了每个 NSTableCellView 的字体大小,但未能通过 header 个单元格进行更改。
我试着这样做
let headerCell = NSTableHeaderCell()
let font = NSFont(name: "Arial", size: 22.0)
headerCell.stringValue = "firstname"
headerCell.font = font
customerTable.tableColumns[0].headerCell = headerCell
header 单元格的字符串值将相应设置,但大小不变。如何更改 header 的字体大小?
谢谢
奥利弗
您可以创建一个 NSTableHeaderCell
子类并实现您要更改的 属性。
在Objective-C(我不擅长Swift):
@implementation CustomTableHeaderCell
-(NSFont *)font {
return [NSFont fontWithName:@"Arial" size:22];
}
// you can alse custom textColor
-(NSColor *)textColor {
return [NSColor redColor];
}
@end
赋值CustomTableHeaderCell
:
CustomTableHeaderCell *headerCell = [[CustomTableHeaderCell alloc] init];
headerCell.stringValue = @"Header title";
self.tableView.tableColumns[0].headerCell = headerCell;
在Cocoa中,有很多东西你不能通过cell.font = ...
改变它的样式,你需要创建一个subcals。
所以,最后我只能通过子类化 NSTableHeaderCell 来解决这个问题。这有点奇怪,因为 Swift 和 Cocoa 总是倾向于支持组合而不是继承,但无论如何。
Swift 3.1
final class CustomTableHeaderCell : NSTableHeaderCell {
override init(textCell: String) {
super.init(textCell: textCell)
self.font = NSFont.boldSystemFont(ofSize: 18) // Or set NSFont to your choice
self.backgroundColor = NSColor.white
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
// skip super.drawWithFrame(), since that is what draws borders
self.drawInterior(withFrame: cellFrame, in: controlView)
}
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
let titleRect = self.titleRect(forBounds: cellFrame)
self.attributedStringValue.draw(in: titleRect)
}
}
更改 attributedStringValue 即可解决问题
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableColumns.forEach { (column) in
column.headerCell.attributedStringValue = NSAttributedString(string: column.title, attributes: [NSFontAttributeName: NSFont.boldSystemFont(ofSize: 18)])
// Optional: you can change title color also jsut by adding NSForegroundColorAttributeName
}
}
https://i.stack.imgur.com/IXJyu.png
我正在尝试在我的代码中更改 NSTableView 的字体大小,以允许用户根据自己的喜好进行更改。 我成功地更改了每个 NSTableCellView 的字体大小,但未能通过 header 个单元格进行更改。
我试着这样做
let headerCell = NSTableHeaderCell()
let font = NSFont(name: "Arial", size: 22.0)
headerCell.stringValue = "firstname"
headerCell.font = font
customerTable.tableColumns[0].headerCell = headerCell
header 单元格的字符串值将相应设置,但大小不变。如何更改 header 的字体大小?
谢谢
奥利弗
您可以创建一个 NSTableHeaderCell
子类并实现您要更改的 属性。
在Objective-C(我不擅长Swift):
@implementation CustomTableHeaderCell
-(NSFont *)font {
return [NSFont fontWithName:@"Arial" size:22];
}
// you can alse custom textColor
-(NSColor *)textColor {
return [NSColor redColor];
}
@end
赋值CustomTableHeaderCell
:
CustomTableHeaderCell *headerCell = [[CustomTableHeaderCell alloc] init];
headerCell.stringValue = @"Header title";
self.tableView.tableColumns[0].headerCell = headerCell;
在Cocoa中,有很多东西你不能通过cell.font = ...
改变它的样式,你需要创建一个subcals。
所以,最后我只能通过子类化 NSTableHeaderCell 来解决这个问题。这有点奇怪,因为 Swift 和 Cocoa 总是倾向于支持组合而不是继承,但无论如何。
Swift 3.1
final class CustomTableHeaderCell : NSTableHeaderCell {
override init(textCell: String) {
super.init(textCell: textCell)
self.font = NSFont.boldSystemFont(ofSize: 18) // Or set NSFont to your choice
self.backgroundColor = NSColor.white
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
// skip super.drawWithFrame(), since that is what draws borders
self.drawInterior(withFrame: cellFrame, in: controlView)
}
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
let titleRect = self.titleRect(forBounds: cellFrame)
self.attributedStringValue.draw(in: titleRect)
}
}
更改 attributedStringValue 即可解决问题
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableColumns.forEach { (column) in
column.headerCell.attributedStringValue = NSAttributedString(string: column.title, attributes: [NSFontAttributeName: NSFont.boldSystemFont(ofSize: 18)])
// Optional: you can change title color also jsut by adding NSForegroundColorAttributeName
}
}
https://i.stack.imgur.com/IXJyu.png