NSTableView Layout verändern

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

  • NSTableView Layout verändern

    Hallo,

    Ich möchte folgende Funktion programmieren: Sobald in einem NSTextField die Pfeiltaste nach unten gedrückt wird, wird die erste Zeile des NSTableView ausgewählt und blau markiert. Der Nutzer soll anschließend sowohl im NSTextField weiterschreiben können als auch in dem TableView navigieren können.

    Das NSTableView kann ich problemlos erstellen und mit Daten füttern. Jedoch liegt mein Problem darin, das NSTextField mit dem NSTableView zu verknüpfen und den Befehl "springe in das NSTableView und markiere die erste Zeile" umzusetzen. Leider finde ich dieses Vorgehen auch in keinem Tutorial.

    Folgenden Code habe ich gefunden, der mir jedoch leider auch nicht wirklich weitergeholfen hat.

    Quellcode

    1. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:1];
    2. [self selectRowIndexes:indexSet byExtendingSelection:NO];
    Viele Grüße,
    Ingo
  • Das war aber ein schnelle Antwort ;)

    Nun, ich habe jetzt jeweils eine subclass von NSTextField (myTextField) und von NSTableView (myTableView) erstellt. In myTextField.m habe ich die keyDown - Methode implementiert:


    Quellcode

    1. -(void)keyDown:(NSEvent *)theEvent{
    2. NSLog(@"ABC");
    3. }
    Jedoch passiert hier nichts :(.
  • Habe es nun geändert:

    Quellcode

    1. -(void)keyUp:(NSEvent *)theEvent{
    2. NSLog(@"ABC");
    3. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:1];
    4. [tableView selectRowIndexes:indexSet byExtendingSelection:NO];
    5. }

    "ABC" erscheint als Log. Das tableView wird nicht markiert ;(.

    Ich habe die myTextField.h Datei insoweit verändert, dass das myTableView.h bekannt ist:


    Quellcode

    1. #import <Cocoa/Cocoa.h>
    2. #import "myTableView.h"
    3. @interface myTextField : NSTextField <NSTextFieldDelegate>{
    4. IBOutlet myTableView* tableView;
    5. }
    6. @end
    Das Outlet habe ich auch verbunden.
  • Nach einigem Herumspielen habe ich sowohl den Fehler gefunden, als auch die fertige Methode geschrieben. Wenn ich die Methode

    Quellcode

    1. - (void)keyUp:(NSEvent *)event

    in die Subclass schreibe, dann funktioniert es nicht. Wenn ich die Methode in meinen ViewController schreibe, dann passt alles wunderbar. Das verstehe ich nicht. Kann mir das bitte jemand erklären ?

    Anbei mein Code:


    Quellcode

    1. -(void)keyUp:(NSEvent *)theEvent{
    2. static int iNew;
    3. // Arrow down
    4. if ([theEvent keyCode]== 125) {
    5. if (iNew == [table1 numberOfRows]) {
    6. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex: iNew];
    7. [table1 selectRowIndexes:indexSet byExtendingSelection:NO];
    8. [table1 scrollRowToVisible:([table1 numberOfRows]-1)];
    9. }
    10. else if(iNew < [table1 numberOfRows]){
    11. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex: iNew];
    12. [table1 selectRowIndexes:indexSet byExtendingSelection:NO];
    13. iNew ++;
    14. [table1 scrollRowToVisible:(iNew-1)];
    15. }
    16. }
    17. // Arrow up
    18. if ([theEvent keyCode]== 126) {
    19. if (iNew ==1) {
    20. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex: iNew-1];
    21. [table1 selectRowIndexes:indexSet byExtendingSelection:NO];
    22. [table1 scrollRowToVisible:0];
    23. }
    24. else{
    25. iNew --;
    26. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex: iNew-1];
    27. [table1 selectRowIndexes:indexSet byExtendingSelection:NO];
    28. [table1 scrollRowToVisible:iNew-1];
    29. }
    30. }
    31. }
    Alles anzeigen
    Jetzt muss ich nur noch die Farbe der selektierten Reihe (von grau auf blau, als ob man die Reihe anklicken würde) ändern und ein weiteres Problem lösen. Immer wen man die Pfeiltaste nach oben drückt, springt das Schriftzeichen (blinkender Strich) an den Anfang des NSTextFields.

    Vielleicht weiß jemand wie man beide Probleme lösen kann ?