美文网首页macOS开发Tips
NSTableView 选中行背景色

NSTableView 选中行背景色

作者: TessmileLu | 来源:发表于2016-12-06 12:11 被阅读1266次

    NSTableView默认 NSTableViewSelectionHighlightStyle

    NSTableview有三种选中模式

    typedef NS_ENUM(NSInteger, NSTableViewSelectionHighlightStyle) {
     
        NSTableViewSelectionHighlightStyleNone NS_ENUM_AVAILABLE_MAC(10_6) = -1,
        
        NSTableViewSelectionHighlightStyleRegular = 0,
        
        NSTableViewSelectionHighlightStyleSourceList = 1,
    
    

    默认模式为NSTableViewSelectionHighlightStyleRegular在此种模式下,行选中颜色有light blue ([NSColor alternateSelectedControlColor]) 和 light gray color ([NSColor secondarySelectedControlColor])两种。
    在开发过程中,根据需求会有改变选中状态下行背景色的情况。下面为将介绍两种改变背景色的方法。

    • 继承NSTableRowView

      继承NSTableRowView ,重写- (void)drawSelectionInRect:(NSRect)dirtyRect 方法。

      - (void)drawSelectionInRect:(NSRect)dirtyRect {
        if (self.selectionHighlightStyle != NSTableViewSelectionHighlightStyleNone) {
            NSRect selectionRect = NSInsetRect(self.bounds, 0, 0);
            [[NSColor yellowColor] setFill];
            NSBezierPath *selectionPath = [NSBezierPath bezierPathWithRoundedRect:selectionRect xRadius:0 yRadius:0];
            [selectionPath fill];
        }
    }
    

    实现协议NSTableViewDelegate的- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row方法

    - (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
    {
        YLTableRowView *rowView = [[YLTableRowView alloc] init];
        return rowView;
    }
    
    • 继承NSTableCellView, 重写- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle方法cellView的backgroudStyle由NSTableRowView自动设置,可根据backgroudStyle的类型对cellView的背景色进行控制。

    The backgroundStyle property is automatically set by the enclosing NSTableRowView to let this view know what its background looks like. For instance, when the -backgroundStyle is NSBackgroundStyleDark, the view should use a light text color.

    - (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle
    {
        [super setBackgroundStyle:backgroundStyle];
        if(backgroundStyle == NSBackgroundStyleDark)
        {
            self.backgroundColor = [NSColor yellowColor];
        }
        else
        {
            self.backgroundColor = [NSColor whiteColor];
        }
    }
    

    相关文章

      网友评论

      • Aal_izz_well:self.backgroundColor 没有这个属性啊。。。
      • 索努木:你遇到过使用第一种写法cell的选中的背景颜色和真是的设置的背景颜色有误差
      • 索努木:第二种很好用!我用的第一种,但是拖拽的时候会出现背景颜色透明,没想到还有第二种方法,解决了我的问题,非常谢谢你的分享!

      本文标题:NSTableView 选中行背景色

      本文链接:https://www.haomeiwen.com/subject/nnxrmttx.html