0

我已经阅读了很多关于此的内容,但我无法让它工作,我有一个带有此代码的自定义 NSCell

#import "ServiceTableCell.h"
@implementation ServiceTableCell

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    NSLog(@"I'm being called");
    NSView *newview = [[NSView alloc] initWithFrame:cellFrame];
    NSImage *image = [NSImage imageNamed:@"bg.png"];
    NSRect imagesize;
    NSImageView *IMV = [[NSImageView alloc] initWithFrame:imagesize];
    [IMV setImage:image];
    [newview addSubview:IMV];
    [controlView addSubview:newview];
}

这是我的 NSTableView 数据源:

- (long)numberOfRowsInTableView:(NSTableView *)tableView {
    return 3;
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(long)row
{
    return [[ServiceTableCell alloc] initTextCell:@"dd"];
}

据我了解,drawwithframe ...在初始化单元格时被调用,但它从未被调用,那么,我错过了什么?

4

2 回答 2

0

方法 tableView:objectValueForTableColumn:row: 应该返回一个对象值,而不是一个单元格。

请注意, NSTableView与您可能熟悉的UITableView 有很大不同。例如,数据源不返回填充了数据的单元格,而是返回数据。并且 NSTableView 中的单元格类型是按列设置的,你不能在一列中有不同类型的单元格(嗯,从技术上讲,这并不完全正确,你可以通过 -[NSTableColumn dataCellForRow:] 拥有不同的单元格)。

于 2011-05-22T22:41:59.663 回答
0

因此,感谢@puzzle 的回答和更多的挖掘,答案是将我的 NSCell 子类设置为 InterfaceBuilder 中的主单元格,然后调用该方法,正如他所说,在 tableView:objectValueForTableColumn:row: 我需要返回数据然后绘制它。

于 2011-05-23T00:26:15.937 回答