0

私は非常に簡単な質問をしているかもしれませんが、これを取り除く方法を得ることができません、要件は、

  1. テーブルには、画像とその横にテキストが表示されます。そのために、テーブルに2つの列を追加しました
  2. NSTableViewは透過的である必要があります。これを行うために、背景を描画しないようにオーバーライドdrawRectメソッド内にCustomNSTableViewクラスを作成し、セルにdrawBackgroundを描画しないように指示しました。
  3. 次のハードルは画像の表示方法です。次の方法でオーバーライド/処理する必要がありました。

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{

    NSImage *pCellImage = // Get a valid Image ;

    if(tableColumn == nil ) return nil;

    NSString *colName = [tableColumn identifier];
    if([colName isEqualToString:@"firstColumn"]){
        NSCell *pCell = [[NSCell alloc]initImageCell:pCellImage];
        return pCell;
    }else{
        NSCell *pCell = [[NSCell alloc]initTextCell:@"Some text"];
        return pCell;

    }
}

私はtableColumn==nil条件を追加しました。これは、指定されたドキュメントのように、各行で初めて、行全体に単一の列を設定する必要がある場合にtableCOlumn nilで呼び出されますが、コメントBAD_ACCESSでクラッシュを返す場合、

今私の質問は、nil条件を処理する方法です。また、両方の列にNSCellを設定した後のこの関数では、別のデリゲート関数に移動します

- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

dataSetを適切に設定した後は、この関数を使用する必要はないと思います。

次の実装ではクラッシュしますが、私はそれを理解することができません、何が問題なのですか、

適切なデータソースとデリゲートを設定しています、

4

1 に答える 1

1

setBackgroundColorを呼び出して、クリアカラーを渡してみましたか?

[myTableView setBackgroundColor:[[NSColor clearColor]];

この方法を使用する場合は、周囲のNSScrollViewに背景を描画しないように指示することを忘れないでください。

または、テーブルの背景をCALayerとして提供することを検討してください。

単一の列に画像とテキストを描画することに関して、Appleの開発者関係は、カスタムNSCell、ImageAndTextCellを公開しています。このセルは、NSTableViewおよびNSOutlineViewインスタンスで使用できます。このカスタムセルは、単一の列内に画像とテキストを描画することを扱います。

于 2011-01-23T06:20:48.067 に答える