• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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?
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Du könntest zum Beispiel in der NSTableView-Delegate Methode tableView:willDisplayCell:forTableColumn:row: der Zelle die richtige Textfarbe verpassen (setTextColor:).

MacApple
 

Applecar

Idared
Registriert
24.01.09
Beiträge
24
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..
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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:

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
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.
 

Applecar

Idared
Registriert
24.01.09
Beiträge
24
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. :eek:
 

Applecar

Idared
Registriert
24.01.09
Beiträge
24
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?
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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
 

Applecar

Idared
Registriert
24.01.09
Beiträge
24
Vielen Dank für die geduldige Hilfestellung :)
Die Methode arrangedObjects war, was ich brauchte..