2010-08-02 69 views

回答

1

有一个很好的例子是如何做到这一点:http://www.cocoadev.com/index.pl?IconAndTextInTableCell你让你自己定制的NSCell,无论绘制图片和文字

@interface IconCell : NSCell 
{ 
NSArray * cellValue; 
} 
- (void)setObjectValue:(id <NSCopying>)object; 
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView; 

@implementation IconCell 

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
NSDictionary * textAttributes = 
    [NSDictionary dictionaryWithObjectsAndKeys:[NSFont 
userFontOfSize:10.0],NSFontAttributeName, nil]; 
NSPoint cellPoint = cellFrame.origin; 

[controlView lockFocus]; 

[[cellValue objectAtIndex:1] compositeToPoint:NSMakePoint(cellPoint.x+2, 
cellPoint.y+14) operation:NSCompositeSourceOver]; 
[[cellValue objectAtIndex:0] drawAtPoint:NSMakePoint(cellPoint.x+18, 
cellPoint.y) withAttributes:textAttributes]; 

[controlView unlockFocus]; 
} 

- (void)setObjectValue:(id <NSCopying>)object 
{ 
    cellValue = (NSArray *)object; 
} 
@end 
+0

值得指出的是该单元需要的数据源就可以提供一个数组(文件名,图标)作为对象值。提问者的额外荣誉:调整单元格代码以期望NSURL作为对象值,并从中获取文件名和图标。 – 2010-08-02 08:49:19

+0

酷,好东西。我现在正在做的是通过数组控制器将我的表视图绑定到捆绑ID数组,通过值转换器将数据包ID转换为应用程序显示名称。我想我的价值转换器可以放出图像和文本组合为单元绘制。无论如何,我需要现在阅读关于NSCell。我之前没有处理过的东西... – 2010-08-02 09:58:28

+2

使用-tableView:willDisplayCell:设置图像部分的委托方法避免了需要使用数组作为对象值。它也可以与Bindings自由混合。 – 2010-08-02 10:09:11

相关问题