2017-04-20 230 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) 
    } 
}