2010-05-07 21 views
5

Tengo un NSTableView que muestra una matriz de objetos que tengo. Para cada uno de estos objetos (filas) me gustaría cambiar el color del texto que se muestra dependiendo de los resultados de una función que ejecuto en cada objeto;Colorear NSTableView Texto por fila

Así que, por ejemplo, todos los objetos de la tabla que existen en otra lista (o algún otro requisito) quiero mostrarlos en texto verde, y los objetos que no existen se muestran en rojo.

¿Cómo voy a hacer esto?

Respuesta

6

Suponiendo que tiene NSTextFieldCell en su tabla (para otras celdas, la configuración del color del texto puede variar), puede lograrlo implementando el método delegado NSTableView.

En primer lugar, debe definir un delegado para el NSTableView, ya sea en Interface Builder o en su código. Este puede ser su controlador de aplicación, por ejemplo.

Entonces, justo aplicar el siguiente método:

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { 
    NSTextFieldCell *cell = aCell; 
    if (...) { 
     [cell setTextColor:[NSColor greenColor]]; 
    } else if (...) { 
     [cell setTextColor:[NSColor redColor]]; 
    } else { 
     [cell setTextColor:[NSColor blackColor]]; 
    } 
} 

Cada vez que el NSTableView dibujará una célula, que tienen la oportunidad de modificar antes de que se ven inmersos.

Consulte la página de documentación NSTableViewDelegate para obtener más detalles.

+0

En la tabla que estoy usando tengo solo NSTextFieldCell, pero ¿y si tuviera algo diferente este método no funcionaría como está? – Tristan

+0

Bueno, no todas las celdas tienen métodos "textColor" y "setTextColor:", como NSButtonCell. Es solo una cosa para verificar. –

Cuestiones relacionadas