2011-01-20 9 views
10

He podido encontrar tutoriales sobre la modificación de los encabezados de tabla en iOS utilizando UITableView, pero no he podido encontrar ninguna información para el desarrollo de mac. ¿Alguien sabe de algún buen recurso/pasos para modificar la apariencia de las tablas?Modificar encabezados de tabla en Mac

Zach

Respuesta

38

Para cambiar la forma en que aparecen los encabezados de la tabla que necesita subclase NSTableHeaderCell, lleve a cabo su propio dibujo personalizado en uno de sus métodos de dibujo, luego vuelva a colocar las celdas de encabezado de cada columna con una instancia de la subclase.

También puede encontrar que necesita subclase NSTableHeaderView para dibujar el espacio donde no hay celdas de encabezado visibles, y para reemplazar el cornerView de la vista de tabla.

Esto debería empezar:

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

Y aquí hay un punto de partida para una subclase de 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

Esa es una excelente respuesta; Desearía haberlo encontrado hace dos días. Eso hubiera significado 48 horas menos de golpear mi cabeza en el escritorio. :-) – nomothetis

+0

¡Gracias, me acabas de ahorrar horas de googl! –

+0

Tengo esto pero lo quiero con bordes en los límites de tableheadercell, ¿cómo lograr eso? – Jesus

0

código para cambiar encabezado de columna en tableView:

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