2017-04-20 197 views
2

我想在我的代码中更改我的NSTableView的字体大小,以允许用户将其更改为他们的喜好。 我通过更改每个NSTableCellView的字体大小而成功,但未能通过标题单元格进行更改。如何更改NSTableHeaderCell的字体大小

我试图做这样的

let headerCell = NSTableHeaderCell() 
let font = NSFont(name: "Arial", size: 22.0) 
headerCell.stringValue = "firstname" 
headerCell.font = font 
customerTable.tableColumns[0].headerCell = headerCell 

的标题单元格的stringValue的将进行相应的设置,但规模不会改变。我怎样才能改变我的头文件的字体大小?

感谢

奥利弗

回答

1

您可以创建一个NSTableHeaderCell子类,并实现你想要更改的属性。

在Objective-C(我不是在斯威夫特好):

@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; 

Screenshot

在Cocoa中,有很多事情可以” t改变它的风格cell.font = ...,你需要创建一个subcalss。

+0

属性字体是已经的NSCell的部分即基类NSTableHeaderCell的。所以财产在那里,但它不被认为是。 –

+0

@OliverKoehler我在Swift中尝试我的解决方案,它似乎不起作用。 – tomfriwel

+0

不,你是对的。我创建了一个从NSTableHeaderCell继承的CustomTableHeaderCell。但是,为了正常工作,设置基类(NSView)的属性就足够了。当我回来工作时,我会上传我的代码。 –

2

所以,最后我只能通过继承NSTableHeaderCell来解决这个问题。 Swift和Cocoa总是倾向于继承构造而不是继承,但无论如何,这在某种程度上是奇怪的。

夫特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) 
    } 
}