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

NSTableView disable-Eigenschaft??

Dieses Thema im Forum "OS X-Developer" wurde erstellt von newvil44, 11.01.08.

  1. newvil44

    newvil44 Gast

    Hallo,

    Wieder stehe ich vor einem Problem. Dieses mal geht es um eine NSTableView.
    Ich habe in meinem Programm eine Authentifizierung eingebaut. Wenn die unlock ist, sollen alle Items auf der GUI auf setEnabled:NO gesetzt werden.

    Nun habe ich auf der GUI ein NSTableView und habe mitbekommen das diese Klasse keine methode setEnable: besitzt. Wie kann man eine NSTableView auf disabled setzen?

    Hab bereits es anders Probiert um events und Aktionen auf der NSTableView zu verhindern (WENN: SFAuthorizationView locked ist).
    Um editierbarkeit auszuschließen habe ich folgendes gemacht:

    int i = 0;
    NSArray *columns = [_tabele tableColumns];

    for( i = 0; i<[columns count]; i++)
    {
    [[columns objectAtIndex:i] setEditable:state];
    NSLog(@"%@",[[columns objectAtIndex:i] description]);
    }

    Um die Selektierung der Spalten zu unterbinden mach ich das:
    [_table setAllowsColumnSelection:state];

    Weiterhin verwende ich die delegate-methode um das Selektieren innerhalb der NSTableView zu unterbinden.

    - (BOOL)tableView:(NSTableView *)aTableView shouldSelectTableColumn:(NSTableColumn *)aTableColumn
    {
    if( [_authView authorizationState] == SFAuthorizationViewUnlockedState) return YES;
    else return NO;
    }

    - (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView
    {
    if( [_authView authorizationState] == SFAuthorizationViewUnlockedState) return YES;
    else return NO;
    }

    Was mir noch fehlt ist die Sortierung der Header auszuschalten. Wie geht das. Mit bindings habe ich schon ne Möglichkeit gefunden. Aber die Sortierung soll ja nur deaktiviert sein wenn SFAuthorizationView locked ist. Gibt es ne Möglichkeit das über den Programmcode zu kontrollieren, oder kann man die NSTableView einfacher noch disablen??

    Danke schon mal im voraus für eventuelle Hilfe :)
     
  2. ifthenelse

    ifthenelse Fießers Erstling

    Dabei seit:
    07.12.06
    Beiträge:
    129
    Mh, komisch, bei mir geht es.

    NSTableView hat zwar keine, aber die SuperClass (NSControl) von NSTableView kennt setEnabled:/isEnabled: sehr wohl. Auch der Interface Builder bietet Dir ein "enabled" auf eine Table-View an... (Du musst dabei nur aufpassen, dass Du tatsächlich auch die Table-View und nicht das Scroll-View selektiert hast.)

    BTW: Du könntest auch noch (musst aber nicht) deine DataSource "abschalten" (einfach keine Daten mehr liefern), damit keine Daten mehr angezeigt werden. Es ist aber oftmals sinnvoll, diese eben aktiv zu halten, sonst ist ja Deine Tabelle einfach nur leer...

    Gruss, Jörg
     
    #2 ifthenelse, 11.01.08
    Zuletzt bearbeitet: 11.01.08
  3. newvil44

    newvil44 Gast

    Hmm ok... setEnable: hat NSTableView geerbt aber wenn ich es verwendet ergibt sich keine Reaktion und die Sortierung funktioniert dann auch noch.

    Habe aber nach einigem herum probieren eine Lösung gefunden.
    Habe eine Methode geschrieben die alle entsp. controls enable oder disable setzt, weiterhin ist in der Methode die bereits weiter oben erwähnte Schleife für das Zulassen der Editierbarkeit der Daten.

    weiter hin habe ich folgende delegate-Methoden verwendet (NSTableView muss delegat zu File's Owner haben)

    - (void)tableView: (NSTableView *)tableView didClickTableColumn: (NSTableColumn *)tableColumn
    {
    if( [_authView authorizationState] == SFAuthorizationViewLockedState)
    {
    [self enableControls:NO];
    }
    }

    - (void)tableViewSelectionDidChange: (NSNotification *)aNotification
    {
    if( [_authView authorizationState] == SFAuthorizationViewLockedState)
    {
    [self enableControls:NO];
    }
    }

    so konnte ich darauf reagieren wenn ein event erfolgt auf die TableView.. ist vielleicht nicht der eleganteste weg aber mit geringem aufwand.
     
  4. Zettt

    Zettt Doppelter Melonenapfel

    Dabei seit:
    16.10.05
    Beiträge:
    3.374
    Mal was GANZ nebenbei drueck doch mal bitte den hier: [​IMG]

    Code:
    if
    then
    else
     
  5. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Mal 'ne Frage, newvil44: Warum willst Du die Aenderung der Sortierreihenfolge (z.B. durch Klick auf die Kopfzeile) in solchen Faellen verbieten? Sortierung ist schliesslich keine Aenderung am Datensatz, sondern nur an dessen Darstellung, vergleichbar eher dem Schieben des Fensters auf dem Bildschirm von links oben nach rechts unten als der Aenderung eines Werts. :D

    Und Zettt: Das kapier' ich nicht.
     
  6. Zettt

    Zettt Doppelter Melonenapfel

    Dabei seit:
    16.10.05
    Beiträge:
    3.374
    Ich wollte damit darauf hinweisen, dass es in BBCode ein spezielles Tag gibt mit dem man Quellcode einfügen kann. Und das ist diese schöne Raute. Dann wird der Text auf schön angezeigt.
     
  7. ifthenelse

    ifthenelse Fießers Erstling

    Dabei seit:
    07.12.06
    Beiträge:
    129
    Puh, und ich hab' schon darüber gegrübelt, was der Zettt von mir will ;)

    Ja, Indentions sind was schönes. Da wird so mancher Code lesbarer – aber nicht immer lesbar!

    P.S. newvil44: Du solltest die Namen der Member deiner (eigenen) Klassen besser nicht mit '_' beginnen. Gerade weil Apple das so macht, kann es hier Konflikte geben...

    Gruss, Jörg
     
  8. newvil44

    newvil44 Gast

    jo, danke für die hinweise :)
     

Diese Seite empfehlen