Frage

ich habe ein NSTableView Ich möchte Benutzern ermöglichen, Videodateien zu ziehen und zu drop. Wenn sie die Datei fallen lassen, wird sie in der Tabellenansicht als Zeile hinzugefügt.

Wie würde ich das machen? Derzeit nimmt die TableView seine Daten von einem Array -Controller (der seine Daten von einem NSMutablearray entnimmt).

ich fand Dies Dokumentation, kann es aber nicht zum Laufen bringen.

Ich habe..

  • machte eine "tablecon" -Klasse (die ich von NstableView geändert habe, nicht von NSObject)
  • Ändern Sie die NstableView -Klasse in TableCon
  • Setzen Sie die Delegierte des NStableView in diese Klasse
  • genannt registerForDraggedTypes in Tablecons Init
  • implementiert - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender; (Wieder in Tablecon)

.. Aber nichts, es tut so, als hätte ich nie etwas geändert (keine Fehler), was mache ich falsch?

Bearbeiten: Ich habe versucht, den Vorschlag von Boaz Stuller zu implementieren und auch gefunden Dies Beschreibung der Lösung (die Erste Antwort Enthält die Lösung für den ersten Beitrag). Also, was ich jetzt getan habe, ist ..

  • Subklasse NSArrayController, der den Inhalt der Tabellenansicht (Tablelistcon) füttert
  • Hinzufügen tableView Auslass zu Tablelistcon (und richtete es auf den NstableView)
  • Implementieren Sie Validatedrop, writerowswithindexes und akzeptieren Sie in Tablelistcon
  • RegisterfordRaggedTypes auf dem Tischansicht -Outlet genannt.

Auch hier scheint keine Fehler/Warnungen, aber nur die wachfromnib -Methode zu genannt (keine der anderen Methoden werden genannt)

War es hilfreich?

Lösung

NstableView behandelt Drag & Drop anders als generische Ansichten, was insgesamt eine gute Sache ist. Dies bedeutet, dass Sie die komplizierten Hervorhebung, Zellverfolgung und Einfügen von Verhaltensweisen, die Tabellen benötigen, nicht manuell behandeln müssen.

Eine Beschreibung dessen, was erforderlich ist, kann gefunden werden hier. Grundsätzlich nennen Sie immer noch -registerDaggedTypes: (im Allgemeinen in Ihrer Methode von -a -awakeFromnib), aber anstatt die NSDRaggingDestination -Methoden implementieren, implementieren Sie die verschiedenen Datenquellenmethoden, die mit Drag & Drop verbunden sind, die gefunden werden können hier. Sie sollten NStableView nicht unterklassen müssen, um Drag-and-Drop auf diese Weise zu implementieren.

Beachten Sie, dass dies Datenquellmethoden sind. Sie müssen die Datenquelle der Tabellenansicht an die Klasse an die Klasse anschließen, die diese Methoden implementiert, damit sie aufgerufen werden können.

Andere Tipps

Zusätzlich zu dem, was Boaz gesagt hat, hört sich es so an, als hätten Sie eine NstableView -Unterklasse erstellen und dann eine Instanz der Unterklasse des Delegierten von NstableView erstellen. Wenn Sie zur Unterklasse gehen, sollte diese Unterklasse anstelle von NstableView verwendet werden, nicht zusätzlich dazu. Außerdem ist es fast immer ein Verstoß gegen die Bedenken, dass eine Ansicht ein Delegierter für ein anderes Objekt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top