Проблемы со шрифтами в ячейке заголовка NSOutlineView - PullRequest
5 голосов
/ 17 августа 2011

В настоящее время я пытаюсь использовать новый NSOutlineView на основе представления в моем приложении Какао. Поскольку я не использую привязки, я реализовал все необходимые методы делегата и источника данных в своем контроллере.

В конструкторе интерфейсов я добавил NSOutlineView с подсветкой, установленной на SourceList и Content Mode, установленной на View Based . Таким образом, было предоставлено два представления ячейки таблицы по умолчанию (одна ячейка заголовка с HeaderCell , установленной в качестве идентификатора, и одна ячейка данных с DataCell , установленной в качестве идентификатора)

Вот как это выглядит в конструкторе интерфейсов: представления ячеек заголовка правильно отображают серо-синий textField , в то время как представления ячеек данных имеют представление изображения и textField с правильным цветом и настройки шрифта

Чтобы предоставить представления, я использую следующий код, чтобы вернуть представление DataCell или представление HeaderCell и соответственно установить textField ячейки на основе соответствующего идентификатора, установленного в конструкторе интерфейса.

- (NSView *)outlineView:(NSOutlineView *)outlineView 
     viewForTableColumn:(NSTableColumn *)tableColumn 
                   item:(id)item {


    NSTableCellView *result = nil;

    if ([item isKindOfClass:[NSMutableDictionary class]]) {
        result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];

        id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : groupedRoster;
        [[result textField] setStringValue:[[parentObject allKeys] objectAtIndex:0]];


    } else {
        result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];

        [item nickname] ? [[result textField] setStringValue:[item nickname]] : [[result textField] setStringValue:[[item jid] bare]];
    }
    return result;
}

Запуск всего выглядит следующим образом.

Может ли кто-нибудь дать мне подсказки, почему ячейка заголовка не выделена жирным шрифтом и не имеет правильного цвета при выборе?

Ответы [ 2 ]

12 голосов
/ 17 августа 2011

Вам необходимо реализовать метод -outlineView: isGroupItem: делегат и вернуть YES для строк заголовка. Это стандартизирует шрифт и заменит раскрывающий треугольник слева на кнопку «Показать / Скрыть» справа. Вам все равно придется вручную вводить строку в верхнем регистре, чтобы получить полный эффект.

Я не уверен, что приведенный выше метод делегата строки группы делает стиль выбора нормальным или нет. Однако обычно вы не хотите, чтобы строки заголовков вообще можно было выбирать в исходных списках, которые вы возвращаете NO для элементов заголовка из метода -outlineView: shouldSelectItem: Delegate.

3 голосов
/ 11 октября 2013

Я создал небольшой пример проекта, который включает список источников, а также использует метод -outlineView:isGroupItem:, как предложил @ boaz-stuller.

  • Отображение списка элементов
  • Редактирование элементов в мастер-стиле
  • Удаление и добавление элементов
  • Использование привязок

Извлечение besi / mac-quickie на github.Большая часть материала либо делается в IB, либо находится в AppDelegate

screenshot

...