Изменение цвета фона NSTextFieldCell при выделении - PullRequest
1 голос
/ 05 марта 2011

Я пытаюсь изменить цвет фона NSTextFieldCell при выделении ячейки.

Это код:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    [super drawWithFrame:cellFrame inView:controlView];

    if([self isHighlighted]) {
        [self setBackgroundColor:[NSColor whiteColor]]; 
    }   
}

Но выбранная строка всегда синего цвета. Я что-то упустил?

Примечание : это не приложение для iOS.

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 08 мая 2011

Это не так просто, как я думаю раньше: у NStableview есть некоторые проблемы.Если вы используете что-то вроде:

[destinationsListForSaleTableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

Вы должны сделать

 - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
 if ([[aTableView selectedRowIndexes] containsIndex:rowIndex]) {
    [aCell setBackgroundColor: [NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1]];

} else [aCell setBackgroundColor: [NSColor colorWithDeviceRed:0.52 green:0.54 blue:0.70 alpha:1]];
[aCell setDrawsBackground:YES];

}  

Этого достаточно, если ячейка не настроена.Если вы меняете высоту и интерьер, это должно быть более сложным:

оставьте таблицу стилей выбора на ваш выбор.В подклассе ячеек:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
return nil;
//[NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1];
}

 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if ([self isHighlighted]) {
    [[NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1] set];
    cellFrame.origin.x -= 1;
    cellFrame.origin.y -= 1;
    cellFrame.size.height += 2;
    cellFrame.size.width += 3;

    NSRectFill(cellFrame);

}
[super drawWithFrame:cellFrame inView:controlView];
}

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

0 голосов
/ 05 марта 2011

Не делай так.Вместо этого, когда вы создаете ячейку в вашем -tableView: cellForRowAtIndexPath:, присвойте свойству selectedBackgroundView ячейки вид, который станет фоном при выборе ячейки.Это может быть просто старый UIView с вашим цветом фона.Я создал категорию в UIView, у которой есть метод + backgroundViewForTableCell:, который делает именно это ... создает экземпляр представления и устанавливает его цвет фона на нужный мне цвет.Я использую это так, когда создаю ячейку:

cell.selectedBackgroundView = [UIView backgroundViewForTableCell:cell];

Еще одна вещь, которую вы можете сделать, когда коснитесь ячейки, это установить цвет любого текста в ячейке.Если цвет вашего фона относительно темный, вы можете изменить цвет текста, например, с черного на белый.

...