2011-01-20 11 views
10

私は、UITableViewを使用してiOS上のテーブルヘッダーを変更するチュートリアルを見つけることができましたが、Mac開発の情報を見つけることはできませんでした。誰もが良いリソース/テーブルの外観を変更する手順を知っていますか?Macでテーブルヘッダーを変更する

ザック

答えて

38

は、テーブルのヘッダーは、あなたが、NSTableHeaderCellをサブクラスその描画方法の一つに、独自のカスタム描画を実行し、その後、あなたのサブクラスのインスタンスで各列のヘッダーセルを交換する必要がある表示方法を変更します。

また、NSTableHeaderViewをサブクラス化して、ヘッダーセルが表示されない任意のスペースを描画し、テーブルビューのcornerViewを置き換える必要があることがあります。

for (NSTableColumn *column in [tableView tableColumns]) { 
    [column setHeaderCell: 
     [[[MyHeaderCell alloc] 
         initTextCell:[[column headerCell] stringValue]] 
         autorelease]]; 
} 

をそしてここNSTableHeaderCellのサブクラスのための出発点です:

これは、あなたが開始を取得する必要

@interface MyHeaderCell : NSTableHeaderCell 
{ 
} 
- (void)drawWithFrame:(CGRect)cellFrame 
      highlighted:(BOOL)isHighlighted 
       inView:(NSView *)view; 
@end 

@implementation MyHeaderCell 

- (void)drawWithFrame:(CGRect)cellFrame 
      highlighted:(BOOL)isHighlighted 
       inView:(NSView *)view 
{ 
    CGRect fillRect, borderRect; 
    CGRectDivide(cellFrame, &borderRect, &fillRect, 1.0, CGRectMaxYEdge); 

    NSGradient *gradient = [[NSGradient alloc] 
     initWithStartingColor:[NSColor whiteColor] 
       endingColor:[NSColor colorWithDeviceWhite:0.9 alpha:1.0]]; 
    [gradient drawInRect:fillRect angle:90.0]; 
    [gradient release]; 

    if (isHighlighted) { 
     [[NSColor colorWithDeviceWhite:0.0 alpha:0.1] set]; 
     NSRectFillUsingOperation(fillRect, NSCompositeSourceOver); 
    } 

    [[NSColor colorWithDeviceWhite:0.8 alpha:1.0] set]; 
    NSRectFill(borderRect); 

    [self drawInteriorWithFrame:CGRectInset(fillRect, 0.0, 1.0) inView:view]; 
} 

- (void)drawWithFrame:(CGRect)cellFrame inView:(NSView *)view 
{ 
    [self drawWithFrame:cellFrame highlighted:NO inView:view]; 
} 

- (void)highlight:(BOOL)isHighlighted 
     withFrame:(NSRect)cellFrame 
      inView:(NSView *)view 
{ 
    [self drawWithFrame:cellFrame highlighted:isHighlighted inView:view]; 
} 

@end 
+1

それは素晴らしい答えです。私は2日前にそれを見つけたかったと思う。それは、机の上で私の頭を叩く48時間の時間を意味するでしょう。 :-) – nomothetis

+0

ありがとう、あなたは私にgoogl'ingの時間を節約しました! –

+0

私はこれを持っていますが、私はそれを達成するために、テーブルヘッドセルの境界線で境界線を付けたいのですか? – Jesus

0

コードのtableViewに列ヘッダーを変更するには:

NSString *title = @"Your Title"; 
NSTableColumn *yourColumn = self.tableView.tableColumns.lastObject; 
     [yourColumn.headerCell setStringValue:title]; 
関連する問題