2011-03-05 69 views
1

我试图在选中单元格时更改NSTextFieldCell的背景颜色。在选择时更改NSTextFieldCell背景颜色

这是代码:

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

    [super drawWithFrame:cellFrame inView:controlView]; 

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

但所选行始终蓝色。我错过了什么?

注意:这不是iOS应用程序。

非常感谢您。

回答

5

这是不容易的,因为我认为之前: 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]; 

} 

这是不够的,如果U型线是不是定制的。 如果你改变高度和内部,它必须更复杂:

保留选择风格表供您选择。 在细胞亚类:

-(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

感谢你,setDrawsBackground:YES是我失踪。 – nebs 2011-12-21 23:43:29

-1

不要这样做。相反,当您在-tableView:cellForRowAtIndexPath:中创建单元格时,请将该单元格的“selectedBackgroundView”属性设置为一个视图,该视图将在选中该单元格时变为背景。这可以只是一个普通的旧UIView与你的背景颜色。我在UIView上创建了一个名为+ backgroundViewForTableCell:的方法,它完全实现了一个视图并将其背景颜色设置为我想要的颜色。我这样使用它,当我创建单元格:

cell.selectedBackgroundView = [UIView backgroundViewForTableCell:cell]; 

你可能要当细胞被窃听做的另一件事是设置在单元格中的任何文本的颜色。例如,如果背景颜色相对较暗,则可能需要将文本颜色从黑色更改为白色。

+0

我不是为iOS编程的,但是谢谢,这非常有用。 :) – Donovan 2011-03-05 17:33:43

+0

对不起 - 我应该仔细阅读。 – Caleb 2011-03-05 17:46:49