2013-04-15 1 views
3

У меня возникла большая проблема и вы не можете ее решить.Как установить цвет фона при выборе строки NSOutlineView

У меня есть NSOutlineView, который содержит NSButtonCell, который связан с arrayController оттуда устанавливает свою Title и основанную на некотором значении изображение устанавливается в фоновом режиме клеток с помощью кодов.

Изображение устанавливается с использованием этих кодов

[cell setImage:[NSImage imageNamed:@"sbWarn.png"]]; 
[cell setImagePosition:NSImageOverlaps]; 
[cell setBackgroundColor:[NSColor clearColor]]; 

Проблема заключается в том, когда я строка выбора выбранная строка показывает черный фон. Я пробовал все возможные способы, как установка фона как clearColor и т. Д.

Как я могу заставить его выглядеть хорошо.

+1

Возможно, вы можете решить это, создав собственный потомок потомков и сделайте там рисунок. Это открывает также больше возможностей, как вы рисуете там контент (например, более одного изображения, значков, разных цветов текста и т. Д.). –

+0

Я предполагаю, что рассматриваемый контур является ячейкой. Представленные представления таблиц (и, следовательно, также общие виды) предоставляют средства для рисования фона как будто (хотя вам придется копаться в документах), но вы потеряете возможность использовать привязки таким же образом, поэтому не уверен, что это того стоит. – Monolo

+0

Может быть что-то здесь: http://stackoverflow.com/questions/2062605/how-to-set-background-color-of-cell-with-nsbuttoncell-type-in-nstableview – Monolo

ответ

1

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

// Outline view delegate 

-(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item { 

    NSUInteger rowNo = [outlineView rowForItem:item]; 

    NSColor *backgroundColor; 
    if ([[outlineView selectedRowIndexes] containsIndex:rowNo]) { 
     backgroundColor = // Highlighted color; 
    } 
    else { 
     backgroundColor = // Normal background color; 
    } 

    [cell setBackgroundColor: backgroundColor]; 
} 

В вашем случае вы, конечно, только применить цвет фона ячейки в столбцах с клетками кнопки.

Эта ячейка кнопки используется, созданная в outlineView:dataCellForTableColumn:item:.

NSButtonCell *cell = [[NSButtonCell alloc] init]; 

[cell setBezelStyle:NSRegularSquareBezelStyle]; 
[cell setButtonType:NSToggleButton]; 
[cell setBordered:NO]; 
[cell setTitle:@""]; 
[cell setImage:[NSImage imageNamed:@"green.png"]]; 
[cell setAlternateImage:[NSImage imageNamed:@"red.png"]]; 
[cell setImagePosition:NSImageOverlaps]; 
+0

buttonCell уже создан в пользовательском интерфейсе. –

+0

@AnoopVaidya Я только что испытал это на своем маленьком стенде, и он тоже работает. Вы делаете что-нибудь в своем 'outlineView: willDisplayCell: forTableColumn: item:'? – Monolo

+0

если я делаю это в nswindow прямо, это работает, но нарисовано на nsview –

0

Я думаю, вам нужно использовать тип кнопки как «Моментальное изменение». Вы можете изменить его из свойств кнопки.