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のセルタイプは列ごとに設定されるため、1つの列に異なる種類のセルを含めることはできません(技術的には、完全に正しいわけではありません。-[NSTableColumn dataCellForRow:]を使用して異なるセルを含めることができます)。

于 2011-05-22T22:41:59.663 に答える
0

@puzzleの答えのおかげで、答えをもう少し掘り下げることは、NSCellのサブクラスをInterfaceBuilderのメインセルとして設定することでした。その後、メソッドが呼び出され、彼が言ったように、tableView:objectValueForTableColumn:rowで:データを返し、それを描画します。

于 2011-05-23T00:26:15.937 に答える