【问题标题】:Draw Text with a border and background for a NSTableView cell为 NSTableView 单元格绘制带有边框和背景的文本
【发布时间】:2014-04-23 06:39:12
【问题描述】:

我有一个基于单元格的表格视图,我想在这个表格视图中显示某种标签,最好不必使用基于视图的表格视图。

是否有一种优雅的方式来实现类似于此处示例 (HTML) 的内容,理想情况下也可以使用背景颜色。

【问题讨论】:

    标签: objective-c macos cocoa nstableview


    【解决方案1】:

    如果您想坚持使用基于单元格的表格视图,您可以继承 NSCell 并覆盖:

    - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView
    {
        NSRect insetRect = NSInsetRect(cellFrame, 2.0, 2.0);
        NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:insetRect xRadius:3.0 yRadius:3.0];
        [path stroke];
        [[NSColor whiteColor] setFill];
        [path fill];
        [[NSColor brownColor] setStroke];
        [path stroke];
        NSMutableAttributedString* content = [[NSMutableAttributedString alloc] initWithString:@"DUPLICATE"];
        NSFontManager* fontManager = [NSFontManager sharedFontManager];
        NSFont* font = [fontManager fontWithFamily:@"Verdana"
                                                  traits:NSBoldFontMask
                                                  weight:0
                                                    size:13.0];
        NSDictionary* attributes = @{NSFontAttributeName:font,
                                     NSForegroundColorAttributeName:[NSColor brownColor]};
        [content setAttributes:attributes range:NSMakeRange(0, [content length])];
        [content setAlignment:NSCenterTextAlignment range:NSMakeRange(0, [content length])];
        [content drawInRect:cellFrame];
    }
    

    上面的代码生成了一个与您的按钮有点相似的单元格(您必须自己调整字体、颜色、线条样式等):

    我还通过提供以下内容调整了表格视图委托中的行高:

    - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
    {
        return 24.0;
    }
    

    【讨论】:

    • 你能在“绘制时间”知道单元格的大小并调整边框的大小吗?
    • 单元格的边框矩形通过 cellFrame 传入。如果你想测量你的文本,你可以使用 NSAttributedString 的 boundingRectWithSize:options:
    猜你喜欢
    • 2012-03-15
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2016-08-18
    • 2016-07-31
    相关资源
    最近更新 更多