1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

NSTableView - Doppelte Einträge nicht anzeigen.

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

  1. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Hallo.
    Ich versuche folgendes Verhalten in einer NSTableView zu erreichen:

    Das sind meine Daten:
    Code:
    Spalte 1: Spalte2:
    A         Foo
    A         Bar
    A         NSFooBar
    B         BarFoo
    B         Text
    
    So soll die Ausgabe aussehen:
    Code:
    Spalte 1: Spalte2:
    A         Foo
              Bar
              NSFooBar
    B         BarFoo
              Text
    
    Wie bringe ich Spalte 1 der NSTableView dazu, ein Feld leer zu lassen, wenn es den selben Inhalt hat wie in der Zeile vorher?

    Danke für Tips, Applecar.
     
  2. sumpfmonsterjunior

    sumpfmonsterjunior Morgenduft

    Dabei seit:
    17.03.05
    Beiträge:
    167
    Womöglich passt ein NSOutlineView für Deine Daten besser (hierarchisches Modell?)?

    Gruß, SMJ
     
    #2 sumpfmonsterjunior, 23.03.09
    Zuletzt bearbeitet: 23.03.09
  3. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Wie „fütterst” Du denn Dein NSTableView? Per DataSource oder per Bindings. Wenn Du es per DataSource machst, hast Du es ja selbst in der Hand, was Du zurückgibst.

    Aber wie SMJ bereits anmerkte stellt sich die Frage, ob NSTableView die passende Darstellung Deiner Daten ist.

    MacApple
     
  4. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Zunächst einmal magst du über SMJs Anmerkung nachdenken. Wenn es kein Modellierungsfehler ist, dann kannst du das mit der Data-Source machen.
    Code:
    - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
    {
       if( tableColumn == aggregatingTableColumn ) {
          if( (row > 0) && ([[[myData objectAtIndex:row-1] prop] isEqualToString:[[myData objectAtIndex:row] prop]]) ) {
             return @"";
          } else {
            return [[myData objectAtIndex:row] prop];
       }
       …
    }
    Oder so ähnlich (typed in Safari).
     
  5. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Hallo,
    danke für die Antworten. Mir ist bewusst, dass es NSOutlineView gibt. Die Idee die ich skizziert habe ist vermutlich auch wirklich nicht gut.

    Dennoch würde ich es gerne hinbekommen (ich bin sowohl im Programmieren wie in Cocoa ein totaler Neuling). Ich habe versucht den Vorschlag von Amin umzusetzen. Ich habe versucht ein Beispielprogramm aus einem Lehrbuch zu modifizieren. Die Spalten werden darin mit idientifiern angesprochen, die im InterfaceBuilder eingetragen werden. Aber es gelingt mir nicht, die if-Abfrage aus Amin's Vorschlag auf dieses Beispiel zu übertragen. Der identifier für die Spalte ist "personName". Aber so wie ich sie formuliert habe wird die Abfrage nie genommen.

    Code:
    - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
    
    {
        //What is the identifier for the column?
        NSString *identifier = [aTableColumn identifier];
        
        //What Person?
        Person *person = [employees objectAtIndex:rowIndex];
    
        NSLog(identifier);
        if(identifier == @"personName")
    
    Obwohl das Log "personName" ausgibt..
     
  6. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Aja, es muss

    Code:
    if([identifier isEqual:@"personName"])
    
    heissen... ein schritt weiter ;)
     
  7. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Ok. Ich habs hinbekommen.
    Danke euch. Ich hab auf jedenfall was dazugelernt, auch wenn meine anfängliche Idee wohl nicht so gut war. Nächster Schritt: eigene Cell für die TableView entwerfen :)
     
  8. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Besser noch -isEqualToString: (NSString), siehe auch Negm-Awad, Objective-C und Cocoa, S. 284 ff.

    Ansonsten, und daher mein Verrgleich: Du kannst gleich zu Anfang der Instanz (hast du -awakeFromNib?) dir die Spalte holen und dann wirklich einen Pointer-Vergleich auf die Spalte machen, wie du in meinem Code siehst.
     

Diese Seite empfehlen