Tableview rows

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tableview rows

    also, f¸r euch wahrscheinlich ne einfache Frage:

    wie kann ich durch eine ausgew‰hlte Row in einem tableView eine Aktion auslˆsen?
    z.B sobald eine Row ausgew‰hlt ist, soll der Inhalt aller Zellen formatiert in einem TextView angezeigt werden.

    [tableView selectedRow], okay, aber wie mach ich das kontinuierliche Update im TextView?

    Gruss,
    AndrÈ
    «Der Sommerserver fiel aus». Mirko Bonné, Hibiskus Code
  • RE: Tableview rows

    ganz einfach, mit notifications:

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(selectionChanged:) name:NSTableViewSelectionDidChangeNotification object:myTable];


    und irgendwo dann

    - (void)selectionChanged:(NSNotification *)not


    die methode kannst du nennen wie du willst, aber sie sollte nat¸rlich bei "selector..." genauso heiflen. wichtig ist der doppelpunkt in der klammer bei "selector"!

    da kannst du dann mit einem enumerator ¸ber deine ausgew‰hlten zeilen gehen -- falls du mehrfachauswahl zugelassen hast. ansonsten reicht "selectedRow". achtung, die einzelnen objekte sind nsnumbers, also einmal ¸ber alle zeilen ungef‰hr so:

    id obj;
    NSEnumerator *enumerator = [myTable selectedRowEnumerator];

    while ((obj = [enumerator nextObject])) {
    int row = [obj intValue];
    // hier jetzt was damit machen

    }



    nett ist auch "setDoubleAction" bei nstableview, vielleicht hilft das ja.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Die Sache mit den Notifications ist prima, aber es geht noch besser:

    Eine Table View hat tats‰chlich zwei Delegates. Der eine geht ¸ber das Outlet "datasource" und versorgt die tableview mit (wie der Name schon sagt) den Daten zur Darstellung. Der andere Outlet heiflt "delegate" und wie es delegates in Cocoa eben so machen, kann auf das verhalten von der tableview einflufl nehmen.

    Dem Delegate werden nicht nur automatisch einige Notifications geschickt, sondern er erh‰lt schon vorher Informationen:

    - (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView;

    - (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(int)rowIndex;

    - (BOOL)tableView:(NSTableView *)aTableView shouldSelectTableColumn:(NSTableColumn *)aTableColumn;

    - (void)tableViewSelectionIsChanging:(NSNotification *)aNotification;

    - (void)tableViewSelectionDidChange:(NSNotification *)aNotification;

    Die letzten beiden sind einfach nur Notifications f¸r die der Delegate automatisch als Observer eingetragen wurde. Die ersten drei Aufrufe erh‰lt nur der Delegate. Wenn der Delegate einen "NO" zur¸ckgibt, dann wird die ƒnderung (in diesem Fall der Selection) verhindert.

    Beispiel:
    - wenn der user eine Reihe ausw‰hlt, werden bestimmte Informationen in einem oder mehreren Textfields oder textviews dargestellt
    - der user ‰ndert die Werte
    - bevor der user eine andere Spalte ausw‰hlt, sollen die ge‰nderten Werte ¸berpr¸ft werden (ob Sie Sinn machen) und abgespeichert werden, tritt dabei ein Fehler auf, soll keine ƒnderung mˆglich sein

    Der Entwickler implementiert

    - (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView;

    in seinem Delegate und validiert dort die Feldwerte, schreibt sie in das Datenmodel zur¸ck und falls ein Fehler auftritt gibt der delegate NO zur¸ck (und stellt freundlicher weise einen Fehlerdialog dar) sonst YES.
    - Titan =)

    "In theory, there is no difference between theory and practice.
    But in practice, there is."
    - Jan L.A. van de Snepscheut

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Titan ()

  • Thanks f¸r die Ausf¸hrungen. Momentan funktionierts f¸r mich mit Notifications, da ich keine Validierung der Daten brauche.

    ¸brigens: wie lˆst man den showGrid-bug in einem NSTableView?
    Apple empfiehlt
    [tableView setDrawsGrid:NO];
    [tableView setDrawsGrid:YES];
    in der Initialisierung, funktioniert bei mir aber auch so nicht.


    Gruss,
    AndrÈ
    «Der Sommerserver fiel aus». Mirko Bonné, Hibiskus Code
  • Das mit den Grids hab ich auch noch nicht hinbekommen (d.h. in den Dec. Dev-Tools hab ich es noch nicht probiert).

    Noch was: ich h‰tte das ganz simpel gemacht. Ich weis ja nicht, aber das war hier noch nicht:

    NSTableView:

    Quellcode

    1. - (void)setAction:(SEL)action
    2. - (void)setTarget:(id)object


    das doubleAction ist ne' nette Erweiterung daf¸r. Aber eigentlich eher Sekund‰r. Sagen wir's so: ich nehme beides ;)

    grufl
    MAX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von M.A.X ()