0

2 列の NSTableView を作成しているときに問題が発生しました。

行の対応する列の値をどのように設定しますか? 行の列にいる必要があると思いcolTextますが、達成するのはほとんど不可能のようです。

コードは次のとおりです。

 - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {
    uint32_t size = *((uint32_t *)[[itemSizes objectAtIndex:rowIndex] bytes]);
    NSString *colText = [NSString stringWithFormat:@"%d bytes", size];

    return [objNames objectAtIndex:rowIndex];
}

私は[objNames objectAtIndex:rowIndex]左の列にいたいのですが、どちらがcolText右ですか?

私は少し立ち往生しています。

どんな助けでも感謝します。

4

3 に答える 3

2

列の識別子 (例: @"firstColumnID" および @"secondColumnID") を指定すると、次のことが可能になります。

- (id)tableView:(NSTableView *)aTableView 
      objectValueForTableColumn:(NSTableColumn *)aTableColumn 
      row:(NSInteger)rowIndex
{
    if ([[aTableColumn identifier] isEqualToString: @"firstColumnID"])
        return [objNames objectAtIndex: rowIndex];
    else 
    {
        // In the original code, NSData was used, but for simple values
        // like this, NSNumbers are better suited, IMO:
        NSUInteger size = [[itemSizes objectAtIndex: rowIndex] unsignedIntegerValue];
        return [NSString stringWithFormat: @"%lu bytes", size];
    }
}
于 2011-08-20T06:00:32.127 に答える
0

コーディングを減らし、バインドを行わない別のオプションは、列識別子をクラス プロパティと同じに設定することです。その場合、if/else を省略することができます。

ここにこのトピックに関する詳細があります:

複数の列を持つ NSTableView

于 2012-11-02T00:21:22.323 に答える
0

2 つのオプション:

  • バインディングを使用するようにコードとユーザー インターフェイスを更新します。メソッド -formattedSize を追加してから NSArrayController を NIB に追加し、配列コントローラーをデータ配列にバインドしてから、テーブル列を ArrangeObjects.description と ArrangeObjects.formattedSize にバインドします。

  • または NSTableColumn を使用して、返されるデータを区別します。

例えば

- (id)tableView:(NSTableView *)tableView
      objectValueForTableColumn:(NSTableColumn *)tableColumn
      row:(int)row
{
    id value = nil;

    if ([[tableColumn identifier] isEqualToString:@"column1"])
    {
        value = [arrayA objectAtIndex:row];
    }
    else
    {
        value = [arrayB objectAtIndex:row];
    }

    return value;
}
于 2011-08-20T05:47:52.210 に答える