2010-01-08 14 views
5

Lo que quiero hacer es establecer el color de fondo de la fila seleccionada en un NSTableView cuando se hace clic en un botón I. He visto otros casos en los que las personas han usado tableView:willDisplayCell:forTableColumn:row: y setBackgroundColor: pero no creo que funcione en mi situación en la que deseo que ocurra cuando se hace clic en un botón.Colorear una fila en un NSTableView

sé que puedo encontrar la fila seleccionada con el método de NSTableView selectedRow y establecer el color de fondo de una celda con setBackgroundColor:, pero lo que no sé cómo hacer es obtener de un NSInteger para la fila seleccionada a un NSCell para establecer el color de fondo de.

Respuesta

7

NSTableView usa solo una instancia de NSCell para cada columna. Al dibujar los contenidos, la celda se actualiza para cada fila. Es por eso que no hay un método para obtener una celda para una fila especificada; debe modificar la celda en tableView:willDisplayCell:forTableColumn:row:.

Puede decirle a la vista de tabla que actualice solo una fila usando reloadDataForRowIndexes:columnIndexes:.

+0

He intentado esto simplemente http://grab.by/1CoC pero le da color a cada hilera gris no solo el que vuelvo a cargar. – Joshua

+1

1. No use 'int'. Use 'NSInteger'. 2. Intenta hacer lo que dijo Nikolai. (Tenga en cuenta que requiere Snow Leopard). 3. Haga que su método 'tableView: willDisplayCell: forTableColumn: row:' compruebe si la fila está seleccionada y si el usuario ha hecho clic en el botón. –

+0

1. Ok. 2 y 3. No puedo hacer exactamente lo que dijo porque tengo un NSOutlineView, ¿o puedo hacerlo porque NSOutlineView hereda de NSTableView? – Joshua

5

Para establecer el color de fondo para NSTableview Fila

- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell1 forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
     if(row==1) 
     [cell1 setBackgroundColor:[NSColor redColor]]; 
     else if(row==2||row==3) 
     [cell1 setBackgroundColor:[NSColor greenColor]]; 
     else 
     [cell1 setBackgroundColor:[NSColor clearColor]]; 
} 

usando este método podemos dar color diferente a cada fila .. Asegúrese drawsBackground está habilitado por NSTextFieldCell de lo contrario esto no tendrá ningún efecto!

+0

Buen puntero en 'drawsBackground'. – DTs

5

Si simplemente desea cambiar el color de toda una fila seleccionada:

NSInteger selectedRow = [self.nsTableView selectedRow]; 
NSTableRowView* rowView = [self.nsTableView rowViewAtRow:selectedRow makeIfNecessary:NO]; 
[rowView setBackgroundColor:[NSColor blackColor]]; 

GLHF

+2

Solo si está usando una tabla basada en vista. Si estamos hablando de tablas basadas en celdas, como creo que estamos, entonces el método rowViewAtRow: ... siempre devolverá nulo. – dgatwood

Cuestiones relacionadas