【问题标题】:Changing NSTextFieldCell background color on selection在选择时更改 NSTextFieldCell 背景颜色
【发布时间】:2011-03-05 17:11:50
【问题描述】:

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

这是代码:

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

    [super drawWithFrame:cellFrame inView:controlView];

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

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

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

提前谢谢你。

【问题讨论】:

    标签: cocoa nstextfieldcell


    【解决方案1】:

    这并不像我以前想的那样容易: 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 当你使用背景时,苹果会留下一个小盒子,它会有不同的颜色。

    【讨论】:

    • 谢谢你,setDrawsBackground:YES 是我所缺少的。
    【解决方案2】:

    不要那样做。相反,当您在 -tableView:cellForRowAtIndexPath: 中创建单元格时,将单元格的“selectedBackgroundView”属性设置为在选择单元格时将成为背景的视图。这可以只是一个带有背景颜色的普通旧 UIView。我在 UIView 上创建了一个类别,它有一个名为 +backgroundViewForTableCell: 的方法,它正是这样做的……实例化一个视图并将其背景颜色设置为我想要的颜色。我在创建单元格时这样使用它:

    cell.selectedBackgroundView = [UIView backgroundViewForTableCell:cell];
    

    点击单元格时您可能想做的另一件事是设置单元格中任何文本的颜色。例如,如果您的背景颜色相对较暗,您可能需要将文本颜色从黑色更改为白色。

    【讨论】:

    • 我不是为 iOS 编程,但是谢谢,这非常有用。 :)
    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多