Как установить текст второго столбца NSTableView? - PullRequest
0 голосов
/ 20 августа 2011

Я столкнулся с проблемой при создании NSTableView с 2 столбцами.

Как установить значение соответствующего столбца строки?Я бы хотел, чтобы в столбце строки было 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 справа?

Я немного застрял.

Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 20 августа 2011

Дайте идентификаторы столбцов (например, @ "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];
    }
}
0 голосов
/ 02 ноября 2012

Другой вариант с меньшим количеством кодирования и без привязок состоит в том, чтобы установить идентификаторы столбцов так же, как свойства класса.В этом случае вы можете обойтись без if / else.

здесь есть больше информации по этой теме:

NSTableView с несколькими столбцами

0 голосов
/ 20 августа 2011

Два варианта:

  • Обновите код и пользовательский интерфейс для использования привязок: добавьте метод -formattedSize, а затем добавьте NSArrayController в NIB, привяжите контроллер массива к массиву данных, а затем привяжите столбец таблицы к вещественному расположению layoutObjects.description и layoutObjects.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;
    }
    
...