2017-04-20 19 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

、あなたができる多くのものが」ありますcell.font = ...でスタイルを変更すると、サブカルalsを作成する必要があります。

+0

プロパティフォントは既にNSTableHeaderCellの基底クラスであるNSCellの一部です。だからプロパティはそこにあるが、何とか考慮されていない。 –

+0

@OliverKoehler私はSwiftで私のソリューションを試してみると、うまくいかないようです。 – tomfriwel

+0

あなたは正しいです。私はNSTableHeaderCellから継承するCustomTableHeaderCellを作成しました。しかし、正常に動作するためには、基本クラス(NSView)のプロパティを設定すれば十分です。私は職場復帰時にコードをアップロードします。 –

2

最後に、NSTableHeaderCellをサブクラス化することでしか解決できませんでした。スウィフトとココアは常に相続よりも構成を好む傾向があったが、とにかくそれは何とか不思議だった。

スイフト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) 
    } 
} 
関連する問題