NSTableView per deletetaste ein element entfernen

  • NSTableView per deletetaste ein element entfernen

    Hallo,

    ich habe ein Programm, mit dem über Bindings Daten in einem TableView verarbeitet werden.

    Im Interface habe ich zwei Knöpfe (+ und -) zum Hinzufügen von Elementen. Jetzt will ich, dass wenn man ein Element im TableView auswählt und dann die deletetaste drückt, das Element entfernt wird. (Wie in iTunes, Adressbuch, Mail). Dazu habe ich eine NSTableView subklasse gemacht, die Quelltextdateien erzeugt und habe im TableView Inspector als CustomClass meine Subklasse ausgewählt.

    In den Quelltextdateien der Subklasse frag ich in der Methode

    Quellcode

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


    mit einer if-abfrage den keycode der gedrückten Taste ab (51). Nur wie sage ich jetzt dem ArrayController, dass er das ausgewählte Object löschen soll?
  • RE: NSTableView per deletetaste ein element entfernen

    Original von hanswurst
    Original von chartus
    hm tu doch einfach den delete button ein keyäquivalent mitgeben?

    das problem ist dabei, dass ich zwei tableviews habe.
    Dafür gibt es doch den First-Responder-Mechanismus, damit genau eine Tabelle aktiv ist und alle Keyequivalents (über Taste oder Menüauswahl) mitbekommt.

    -- hns
  • RE: NSTableView per deletetaste ein element entfernen

    Passt hier gerade ganz gut rein.

    Gibt es eine Möglichkeit über Bindings, den Entfernen Button über Bindings nur dann enabled zu setzen, wenn auch etwas im TableView selektiert ist?

    Ich habe versucht den enabled Key vom Button an den ArrayController z.B. mit selectedObjects zu binden, aber dies funktioniert nicht.

    Stehe da ein wenig auf dem Schlauch. ?(
  • RE: NSTableView per deletetaste ein element entfernen

    Danke Tom, Funktioniert natürlich wunderbar mit dem canRemove Schlüssel.

    Man sollte halt auch nicht vergessen den selectionIndexes Schlüssel vom TableView mit dem ArrayController zu verbinden. Da kann man dann schön im TableView herum klicken ohne dass sich die Selektion im ArrayController ändert. Dann funktioniert natürlich auch das Feedback auf den Entfernen Button nicht. :)
  • RE: NSTableView per deletetaste ein element entfernen

    ? Ich habe das noch nie verbunden. Das sollte er automatisch machen. Bist du dir sicher, dass das bei dir ein Problem verursachte!?
    +++
    Ansonsten, wenn es wirklich auf die Selektierung ankäme, dannn böte sich wohl ein Value-Transformer an, der aus den Selected-Objects oder Selected-Indexes so etwas wie ein BOOL isEmpty macht.

    Dies aber nur am Rande fürs Protokoll.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: NSTableView per deletetaste ein element entfernen

    Also ich hatte zuerst beim TableView nur den content über den Schlüssel arrangedObjects an den ArrayController gebunden. Da konnte ich über das Programm im ArrayController selektieren was ich wollte und der TableView hat sich nicht synchronisiert. Eine Selektion im TableView hatte natürlich auch keine Auswirkungen auf die Selektion im ArrayController.

    Erst als ich auch die selectionIndexes im TablesView über den Schlüssel selectionIndexes an den ArrayController gebunden habe laufen die Selektionen im TableView und im ArrayController synchron. Habe es gerade noch mal getestet und ohne selectionIndexes Binding bekomme ich die Selektion im TableView und im ArrayController nicht synchronisiert.

    Funktioniert es denn bei Dir wenn Du nur das content Binding gesetzt hast?

    Ach so, es funktioniert natürlich auch komplett ohne das content Binding beim TableView da ich ja die Spalte(n) einzeln über das value Binding an den ArrayController binde. Wenn man jedoch das content Binding vom TableView verwendet, dann muss man wohl auch das selectedIndexes Binding verwenden, richtig?
  • RE: NSTableView per deletetaste ein element entfernen

    Ah! Jetzt verstehe ich. Ja, das kann sein. Das content-Binding wird eigentlich automatisch aus den Value-Bindings der Spalten gesetzt. Muss ich mir mal anschauen.

    Das ganze ist strukturell an der Stelle leider missraten: Eigentlich dürfte es nur ein content-Binding für die Tabelle geben und reine Keys für die Spalten. So ähnlich wie das jetzt Beim Tree-Controller mit dem Child-Path ist. Der ist ja auch kein eigenständiges Binding.

    Muss ich mir anschauen, klingt interessant. Mutmaßlich setzt er die Selektion schon, versucht es zumindest, landet dann aber einfach nicht beim richtigen Array-Controller.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?