Понимание того, как разные методы в OutlineView связаны - PullRequest
1 голос
/ 09 октября 2011

У меня проблемы с полным пониманием всех разных мест, которые вы можете вернуть ячейки при использовании OutlineView. Насколько я могу сказать, есть четыре места:

NSOutlineViewDataSource имеет:

  • outlineView:child
  • outlineView:objectValueForDataColumn

А NSOutlineViewDelegate имеет:

  • outlineView:willDisplayCell
  • outlineView:dataCellForTableColumn

Если у меня есть контурное представление с различными элементами, как, например, в примере с SourceList, где мне делать что и почему? У меня есть заголовки GroupItem и дерево ячеек IconAndImage, которые подкласс NSTextFieldCell. Где они должны быть созданы, и где я должен установить стиль, изображение и заголовок?

1 Ответ

1 голос
/ 09 октября 2011

То, что какао подразумевает под словом «ячейка», отличается от того, что вы называете ячейкой, например, в Excel.

В какао ячейка является подклассом NSCell и может рассматриваться как легкаямногоразовый NSView.Он используется для рисования многих предметов таким же образом.Например,

- (void)drawRect:(NSRect)draw_rect {
    // ...
    for ( id value in myDataArray ) {
        [cell setObjectValue:value];
        NSRect cellFrame = ...;
        [cell drawWithFrame:cellFrame inView:self];
    }

Таким образом, источник данных не возвращает ячейки, а вместо этого возвращает объекты, которые являются параметрами, в [(NSCell) -(void)setObjectValue:(id)value].Делегат возвращает, какой объект ячейки использовать для каждого элемента, и должен быть реализован таким образом, чтобы каждый тип ячейки создавался только один раз.Например,

- (NSCell *)outlineView:(NSOutlineView *)outlineView
 dataCellForTableColumn:(NSTableColumn *)tableColumn
                   item:(id)item {
    NSCell *cell = nil;
    switch(tableColumn.tag) {
         case 0:
             if  ( ! myCell ) {
                  myCell = [[NSCell alloc] init];
             }
             cell = myCell;
             break;
        default:
             break;
    }
    return cell;
}

. Вы должны использовать теги столбцов таблицы или аналогичную функцию для повторного упорядочивания столбцов пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...