2011-01-20 62 views
10

我已經能夠找到有關在iOS上使用UITableView修改表格標題的教程 - 但還沒有找到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

這是一個很好的答案;我希望兩天前我能找到它。那意味着48小時的時間將我的頭撞在桌子上。 :-) – nomothetis 2011-11-02 15:52:23

0

代碼來更改列標題的tableView:

NSString *title = @"Your Title"; 
NSTableColumn *yourColumn = self.tableView.tableColumns.lastObject; 
     [yourColumn.headerCell setStringValue:title];