代码之家  ›  专栏  ›  技术社区  ›  Greg Combs

NStextFieldCell或仅具有垂直文本的NSCell(和彩色着色)

  •  2
  • Greg Combs  · 技术社区  · 14 年前

    我正在努力寻找一种优雅的方式来垂直显示表格视图的列标题(从传统视图逆时针旋转90度)。我并没有把它作为一个实际的nstableheadercell来做,我想通过重写nstextfieldcell或nscell来做这件事可能会更容易一些。

    单元格只包含不可编辑的文本,但通常是其中的两行,根据上下文的不同,它有时会与列的其余部分着色。

    我似乎找不到任何cocoa应用程序能做到这一点,更不用说开源的例子了。有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Greg Combs    14 年前
    #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
    
    推荐文章