Nie mówisz, jakiego widoku lub hierarchii widoków używasz dla swoich komórek. Nie mówisz też, w jaki sposób lub gdzie ustawiasz kolor pól tekstowych lub jaki jest ich kolor.
Po wybraniu wiersza automatycznie obliczana jest jego interiorBackgroundStyle
. Ustawia także backgroundStyle
widoku komórki, jeśli odpowiada na -setBackgroundStyle:
lub jest NSControl
z komórką, która na to odpowiada.
Jeśli widok z komórki jest instancją NSTableCellView
, to przekazuje styl tła do wszystkich jego subskrybentów, które spełniają te same kryteria. Jeśli używasz innego widoku kontenera jako widoku komórki i chcesz, aby styl tła był przesyłany dalej w ten sposób, musisz to zaimplementować samodzielnie w klasie widoku.
Komórka (NSTextFieldCell
) odpowiada na -setBackgroundStyle:
, a więc jej styl tła jest automatycznie ustawiany przez powyższe mechanizmy. Komórka pola tekstowego automatycznie zmieni kolor tekstu na biały, jeśli jego textColor
jest jednym ze standardowych kolorów kontrolnych (np. NSColor.controlTextColor()
), ale nie zrobi tego, jeśli przypiszesz niestandardowy kolor. Tak więc, jeśli ustawiasz określony kolor tekstu, jesteś odpowiedzialny za jego zmianę, gdy zmienia się styl tła.
Można użyć podklasy NSTableCellView
i dodać obiekt obserwujący właściwości (didSet
) dla właściwości backgroundStyle
. To może zmienić pole tekstowe na textColor
w zależności od ustawionego stylu. Na przykład możesz użyć własnego koloru, jeśli styl tła nie jest .Dark
lub użyj zwykłego koloru pola tekstowego NSColor.controlTextColor()
, jeśli jest to .Dark
(tak, że pole tekstowe faktycznie wyświetli je jako białe).
Możesz również użyć podklasy NSTextFieldCell
dla swojego pola tekstowego i zrobić to samo. Możesz też zastąpić drawInteriorWithFrame(_:inView:)
, aby rysować z innym kolorem tekstu w zależności od stylu tła.
W tableView: viewForTableColumn: row: delegate method Robię to, aby ustawić kolor pola tekstowego w mojej komórce opartej na widoku: cell.textField! .textColor = NSColor.redColor(). Komórki ustawione na blackColor() invert just fine, ale redColor() nie. Twoja odpowiedź zajmie trochę czasu, więc dziękuję za udzielenie mi pomysłów. –
Stary, sprawdzę, ale jeśli to działa, jesteś moim wybawcą !! AppKit jest tak dziwny, gdy przychodzi od UIKit :) – Frizlab
Działa! \ o/Awesome. – Frizlab