NSTextFieldCell или просто NSCell с вертикальным текстом (и цветной тонировкой) - PullRequest
2 голосов
/ 29 апреля 2010

Я пытаюсь найти элегантный способ отображения заголовков столбцов для табличного представления по вертикали (повернут на 90 градусов против часовой стрелки от традиционного). Я не женат, чтобы делать это как настоящий NSTableHeaderCell, я подумал, что это может быть проще сделать, переопределив NSTextFieldCell или NSCell.

Ячейки содержат только нередактируемый текст, но обычно это две строки, и иногда он окрашивается остальной частью столбца в зависимости от контекста.

Я не могу найти какие-либо приложения для какао, которые делают это, тем более пример с открытым исходным кодом. Есть мысли?

1 Ответ

2 голосов
/ 02 мая 2010
#import "VerticalTextCell.h"

@implementation VerticalTextCell

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    NSMutableDictionary *atr = [NSMutableDictionary dictionary];
    NSFont *font = [NSFont fontWithName:@"Lucida Grande" size:12];
    [atr setObject:font forKey:NSFontAttributeName];

    [[[self backgroundColor] colorWithAlphaComponent:0.7] set];
    NSRectFillUsingOperation(cellFrame, NSCompositeSourceOver);

    NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
    [currentContext saveGraphicsState];

    NSAffineTransform *transform = [NSAffineTransform transform];
    [transform translateXBy:NSMinX(cellFrame) yBy:NSMinY(cellFrame)];
    [transform rotateByDegrees:-90];
    [transform concat];

    // vertical inset 5 pixels
    [[self stringValue] drawInRect:NSMakeRect(-NSHeight(cellFrame),5,NSHeight(cellFrame),NSWidth(cellFrame)) withAttributes:atr]; 

    [currentContext restoreGraphicsState];

}


@end
...