1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

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

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Applecar, 29.05.09.

  1. Applecar

    Applecar Idared

    Dabei seit:
    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?
     
  2. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    Du könntest zum Beispiel in der NSTableView-Delegate Methode tableView:willDisplayCell:forTableColumn:row: der Zelle die richtige Textfarbe verpassen (setTextColor:).

    MacApple
     
  3. Applecar

    Applecar Idared

    Dabei seit:
    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..
     
  4. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    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
     
  5. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Es geht auch mit Bindings,was deutlich weniger Code ist.
     
  6. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    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
     
    #6 MacApple, 31.05.09
    Zuletzt bearbeitet: 31.05.09
  7. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
  8. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Übrigens geht es auch mit Transformern, möglicherweise eine Idee mehr Code ist, dafür allgemein einsetzbar.
     
  9. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    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:
     
  10. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    Warum solltest Du nicht davon ausgehen können?

    MacApple
     
  11. Applecar

    Applecar Idared

    Dabei seit:
    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?
     
  12. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    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
     
  13. Applecar

    Applecar Idared

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

Diese Seite empfehlen