2015-02-11 15 views
6

W mojej aplikacji mam NSTableView oparty na widoku z jedną kolumną. Kolor podświetlenia rzędów jest ustawiony na regularny (niebieski). Muszę zmienić ten kolor na mój własny kolor. W konstruktorze interfejsów próbowałem go zmienić, ale jedynymi opcjami są "Brak, lista regularna i źródłowa".Kakao osx NSTableview zmiana koloru podświetlenia wiersza

Próbowałem za ten post rozwiązanie bez powodzenia: https://stackoverflow.com/a/9594543/3065901

Czytałem, że muszę używać tej metody delegata, ale nie wiem jak tego używać.

Próbowałem rysować wiersz w tej metodzie, ale otrzymuję niepoprawne ostrzeżenia kontekstowe, a wiersz nadal zachowuje się z tym samym nadświetleniem. Po przesłaniu prostego przykładu korzystania z tej delegowanej metody:

Potrzebujesz pomocy. Z góry dziękuję.

+0

Używasz widok tableView oparciu lub komórkę w oparciu. – Srinidhi

+0

Używam widoku opartego na – user3065901

Odpowiedz

8

z tego link.

MyNSTableRowView.h

#import <Cocoa/Cocoa.h> 
@interface MyNSTableRowView : NSTableRowView 
@end 

MyNSTableRowView.m

#import "MyNSTableRowView.h" 

@implementation MyNSTableRowView 
- (id)init 
{ 
    if (!(self = [super init])) return nil; 
    return self; 
} 

- (void)drawSelectionInRect:(NSRect)dirtyRect { 
    if (self.selectionHighlightStyle != NSTableViewSelectionHighlightStyleNone) { 
    NSRect selectionRect = NSInsetRect(self.bounds, 2.5, 2.5); 
    [[NSColor colorWithCalibratedWhite:.65 alpha:1.0] setStroke]; 
    [[NSColor colorWithCalibratedWhite:.82 alpha:1.0] setFill]; 
    NSBezierPath *selectionPath = [NSBezierPath bezierPathWithRoundedRect:selectionRect 
                   xRadius:6 yRadius:6]; 
    [selectionPath fill]; 
    [selectionPath stroke]; 
    } 
} 
@end 

AppDelegate.m

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row 
{   
    MyNSTableRowView *rowView = [[MyNSTableRowView alloc]init]; 
    return rowView; 
} 
2

Jeśli używasz tableview komórek na podstawie ustaw NSTableView selectionHighLightStyle do Brak NSTableView i zastąpić drawRow próbki poniżej

- (void)drawRow:(NSInteger)row clipRect:(NSRect)clipRect { 
     NSColor* bgColor = Nil; 
    // Set the color only when its first responder and key window 
    if (self == [[self window] firstResponder] && [[self window] isMainWindow] && [[self window] isKeyWindow]) 
    { 
     bgColor = [NSColor brownColor]; 
    } 
    else 
    { 
     bgColor = [NSColor windowBackgroundColor];; 
    } 

    NSIndexSet* selectedRowIndexes = [self selectedRowIndexes]; 
    if ([selectedRowIndexes containsIndex:row]) 
    { 
     [bgColor setFill]; 
     NSRectFill([self rectOfRow:row]); 
    } 
    [super drawRow:row clipRect:clipRect]; 
} 
7

Oto odpowiedź user3065901 w Swift 3:

class MyNSTableRowView: NSTableRowView { 

    override func drawSelection(in dirtyRect: NSRect) { 
     if self.selectionHighlightStyle != .none { 
      let selectionRect = NSInsetRect(self.bounds, 2.5, 2.5) 
      NSColor(calibratedWhite: 0.65, alpha: 1).setStroke() 
      NSColor(calibratedWhite: 0.82, alpha: 1).setFill() 
      let selectionPath = NSBezierPath.init(roundedRect: selectionRect, xRadius: 6, yRadius: 6) 
      selectionPath.fill() 
      selectionPath.stroke() 
     } 
    } 
} 

NSTableViewDelegate:

func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? { 
    return MyNSTableRowView() 
} 
+0

Jesteś niesamowity! Dzięki za to rozwiązanie. – ixany

+0

To działa całkiem dobrze, ale kłopot, który mam, polega na tym, że podkreślenie wiersza pozostaje w tym kolorze, nawet jeśli tabela jest w stanie "rozmytym". Na przykład, jeśli wybierzesz wiersz, a następnie klikniesz w pole 'NSTextField', wiersz tabeli będzie nadal podświetlony, ale tekst znowu będzie ciemny. Oto przykładowy film: https://d.pr/v/0KmToP ... jakikolwiek pomysł na zmianę koloru tła tego stanu? –

0

Dodaj poniżej linii w swojej metodzie Tableview

ObjectiveC

[yourtableview setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone]; 

Swift

yourtableview.selectionHighlightStyle = .none 
Powiązane problemy