• Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick
  • November - das bedeutet oftmals Herbstblues, grauer Himmel, Tristesse und Wetter, bei dem man gern im Warmen bleibt. Aber nur oftmals! Wir fordern Euch gern auf, gegen den Herbstblues anzukämpfen und hoffen, dabei hilft Euch unser aktuelles Monatsthema. Neugierig geworden? --> Zum Mitmachen bitte hier klicken

NSFormatter: Der Wert einer Spalte soll die ganze Zeile formatieren. Wie geht das?

Applecar

Idared
Registriert
24.01.09
Beiträge
24
Angenommen ich habe in einer NSTableView die Spalten "Bezeichnung" und "Betrag".

Ich kann mit einem NSFormatter leicht einen negativen Betrag in der Betragspalte rot darstellen.

Aber ich würde gerne die ganze Zeile, also auch die Bezeichnung, rot darstellen, wenn der Betrag in dieser Zeile negativ ist. Wie mache ich das?
 
Du könntest zum Beispiel in der NSTableView-Delegate Methode tableView:willDisplayCell:forTableColumn:row: der Zelle die richtige Textfarbe verpassen (setTextColor:).

MacApple
 
Ah, ok, Danke! Ich hab die Delegate ganz gut hinbekommen. Sogar mit CoreData :)

Ich kann jetzt z.B. generell Zeile 5 grün darstellen. Aber angenommen die Tabelle hat 5 Spalten und jede enthält nur Strings..

Jetzt will ich abfragen: Wenn eine der 5 Spalten einer Zeile das Wort "grün" enthält soll die *ganze* Zeile grün dargestellt werden.

Bin ich also wieder bei dem selben Problem, das ich auch mit dem Formatter hatte. Ich habe eine Zelle und jetzt will ich die anderen Werte überprüfen, die in die gleiche Zeile kommen, um über die Formatierung der aktuellen Zelle zu entscheiden. Die Lösung ist vermutlich trivial - aber ich bin ein absoluter Anfänger..
 
Ja, die Lösung ist trivial. Du hast ja die Zeile und Du weißt, wie Dein Datenmodell aufgebaut ist. Du kannst doch jede „Spalte” der Zeile im Datenmodell abfragen. Du fragst also Dein Datenmodell, ob in der entsprechenden „Spalte“ der wert „grün“ drin steht und setzt dann die Farbe für den Text.

MacApple
 
Kann man die Textfarbe wirklich per Binding setzen, wenn diese an eine Bedingung geknüpft ist?

Edit: Na klar, geht das. Man muss aber dem Modell eine entsprechende Eigenschaft geben. Ein bisschen Code ist also schon nötig.

MacApple
 
Zuletzt bearbeitet:
Kann man die Textfarbe wirklich per Binding setzen, wenn diese an eine Bedingung geknüpft ist?

Edit: Na klar, geht das. Man muss aber dem Modell eine entsprechende Eigenschaft geben. Ein bisschen Code ist also schon nötig.

MacApple

Es geht auch mit Bindings,was deutlich weniger Code ist.

Übrigens geht es auch mit Transformern, möglicherweise eine Idee mehr Code ist, dafür allgemein einsetzbar.
 
Ja, die Lösung ist trivial. Du hast ja die Zeile und Du weißt, wie Dein Datenmodell aufgebaut ist. Du kannst doch jede „Spalte” der Zeile im Datenmodell abfragen. Du fragst also Dein Datenmodell, ob in der entsprechenden „Spalte“ der wert „grün“ drin steht und setzt dann die Farbe für den Text.

Aber woher weiss ich denn, welches Object aus meinem Datenarray gerade in der Tabelle angezeigt wird? Ich bekomme von dem Delegate die Spalte, die Zeile und die Zelle, aber das zugehörige Datenobject? Wie schliesse ich denn daraus auf das Datenobject das da gerade angezeigt wird? Ich kann ja nicht davon ausgehen, dass z.B. das was im Datenarray an 3. Stelle steht auch in der Tabelle in der 3. Zeile steht. :-!
 
Die Tabelle kann verschieden sortiert sein, es kann durch Suche-Funktionen nur einen Teil des Datenarrays in der Tabelle angezeigt werden, usw.

Ich hätte eine Methode gesucht, die man auf der Zelle aufrufen kann und die dann das Object zurückgibt, von dem die in der Zelle angezeigten Daten stammen, oder so was?
 
Wie „fütterst” Du denn Deine Tabelle? Über einen NSArrayController? Wenn ja, enthält das Array, was Dir die Methode arrangedObjects des NSArrayController liefert, genau die Daten, die in NSTableView angezeigt werden, inklusive Sortierung und Filterung.

MacApple
 
Vielen Dank für die geduldige Hilfestellung :-)
Die Methode arrangedObjects war, was ich brauchte..