Изменение цвета фона NSTextFieldCell при выборе

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

Это код:

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

    [super drawWithFrame:cellFrame inView:controlView];

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

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

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

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


person Donovan    schedule 05.03.2011    source источник


Ответы (2)


Это не так просто, как я думал раньше: у 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];
}

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

person Alex    schedule 08.05.2011
comment
Спасибо за это, setDrawsBackground:YES - это то, чего мне не хватало. - person nebs; 22.12.2011

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

cell.selectedBackgroundView = [UIView backgroundViewForTableCell:cell];

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

person Caleb    schedule 05.03.2011
comment
Я не программирую для iOS, но спасибо, это очень полезно. :) - person Donovan; 05.03.2011