2017-08-04 2 views
0

Ich habe eine NSTableview mit Beschriftungen innerhalb und außerhalb einer Unteransicht. Wenn eine Zeile ausgewählt ist, sollte die Farbe des Textes in der Textbeschriftung weiß werden.Wie behält man die Steuerfarbe in der Unteransicht?

enter image description here

In diesem Fall Status und Rank haben beide Kontrolle Text Farbe, aber nur Status werden weiß, wenn sie ausgewählt, weil es nicht in einem Subview ist.

enter image description here

Ist es möglich, in einem Textlabel auch diese Funktionalität der Steuerung Farbe zu halten, wenn es in einem Subview ist?

enter image description here

Antwort

1

Sie müssen manuell Code, der entweder durch eine Erweiterung hinzufügen oder eine Unterklasse deklarieren und die setBackgroundStyle außer Kraft setzen, da NSTableView die Funktion bis zu seiner Subviews nicht rekursiv aufrufen.

extension NSTableView { 
    func setBackgroundStyle(_ newValue: NSBackgroundStyle) { 
     for view in self.subviews { 
      view.setBackgroundStyle(newValue) 
     } 
    } 
} 

extension NSTextField { 
    func setBackgroundStyle(_ newValue: NSBackgroundStyle) { 
     switch newValue { 
      case NSBackgroundStyleDark: 
       self.textColor = NSColor.controlHighlightColor 
      case NSBackgroundStyleLight: 
       self.textColor = NSColor.controlColor 
     } 
    super.setBackgroundStyle(newValue) 
    } 
} 
+0

Das sieht nach einem absolut vernünftigen Ansatz aus. Ich habe ein bisschen versucht, aber es gibt einige Probleme: in Unteransichten anzeigen sind NSView und nicht NSTextfield. So erkennt es den 'setBackgreoundStyle()' nicht. Auch in der NSTextfield-Erweiterung überschreibt der 'override func setBackgroundStyle' keine Metoden aus seiner Oberklasse. –

+0

Entschuldigung, Sie implementieren einfach die setBackgroundStyle Funktion, keine Notwendigkeit zu überschreiben, überprüft NSTableCellView Klassenreferenz: _Upon Einstellung, die Standardimplementierung automatisch Aufrufe an alle Subviews, die implementieren -setBackgroundStyle: oder sind ein NSControl (die NSCells, die reagieren auf -setBackgroundStyle:) ._ –

Verwandte Themen