Tengo un NSTableView
con varias columnas de texto. Por defecto, el dataCell
para estas columnas es una instancia de la clase NSTextFieldCell
de Apple, que hace todo tipo de cosas maravillosas, pero dibuja texto alineado con la parte superior de la celda, y quiero que el texto se centre verticalmente en la celda.¿Hay una manera "correcta" de hacer que NSTextFieldCell dibuje texto centrado verticalmente?
Hay una bandera interna en NSTextFieldCell
que se puede utilizar para centrar verticalmente el texto, y funciona muy bien. Sin embargo, dado que es una bandera interna, Apple no sanciona su uso y simplemente podría desaparecer sin previo aviso en una versión futura. Actualmente estoy usando esta bandera interna porque es simple y efectiva. Apple obviamente ha dedicado un tiempo a implementar la función, por lo que no me gusta la idea de volver a implementarla.
Así; mi pregunta es la siguiente: ¿Cuál es la forma correcta de implementar algo que se comporta exactamente como NStextFieldCell de Apple, pero dibuja texto centrado verticalmente en lugar de alineado a la parte superior?
Para el registro, aquí está mi "solución" actual:
@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end
@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
@try { _cFlags.vCentered = centerVertical ? 1 : 0; }
@catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end
utiliza como sigue:
[[myTableColumn dataCell] setVerticalCentering:YES];
No creo que el bloque try/catch tenga algún sentido en este caso, porque _cflags es una estructura C, no un objeto Objective C. Si se modifica esta estructura en una versión futura de Mac OS X, pueden ocurrir todo tipo de cosas extrañas, pero no se lanzará ninguna excepción. –
@Jakob Egger: Probablemente tengas razón. Encontré esa solución en otra parte de Internet y la copié en el estado en que se encuentra. –
Deberías aceptar la respuesta de Jakob Egger. Cuando se usa el código de la respuesta aceptada, causa un error extraño cuando se edita 'NSTextFieldCell'. La respuesta de Jakob resuelve el problema. –