【发布时间】:2014-04-23 06:39:12
【问题描述】:
我有一个基于单元格的表格视图,我想在这个表格视图中显示某种标签,最好不必使用基于视图的表格视图。
是否有一种优雅的方式来实现类似于此处示例 (HTML) 的内容,理想情况下也可以使用背景颜色。
【问题讨论】:
标签: objective-c macos cocoa nstableview
我有一个基于单元格的表格视图,我想在这个表格视图中显示某种标签,最好不必使用基于视图的表格视图。
是否有一种优雅的方式来实现类似于此处示例 (HTML) 的内容,理想情况下也可以使用背景颜色。
【问题讨论】:
标签: objective-c macos cocoa nstableview
如果您想坚持使用基于单元格的表格视图,您可以继承 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;
}
【讨论】: