Hallo zusammen!
Ich habe bei meiner Anwendung die Möglichkeit implementiert, Dateien mittels Drag'n'Drop auf die viewbased NSTableview zu ziehen. Die von der NSTableView verwendete NSTableCellView beinhaltet drei Labels (NSTextFieldCell) und ein Image (NSImageCell). Die erlaubten DragTypes habe ich direkt in der verwendeten SubClass von NSTableView definiert
Alles anzeigen
Der Rest des Drop-Vorgangs wird beim NSTableViewDataSource mit den beiden Funktionen
func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo, row: Int, dropOperation: NSTableView.DropOperation) -> Bool
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation
erledigt. Soweit funktioniert alles prima bis auf eine nervige Kleinigkeit: Bewege ich beim Drag-Vorgang die Maus über das Image in der jeweiligen Zeile wird Auswahl der Zeile aufgehoben. Also einfach gesagt: ich bewege den Mauszeiger bei einem Drag-Vorgang in eine Zeile der TableView -> Die Zeile wird wie gewünscht ausgewählt und bleibt dies auch ... bis ich innerhalb der Zeile in den Bereich des Images komme ... Schwups, die Auswahl ist wieder weg. Bewege ich die Maus wieder aus dem Bereich des Images in den "Rest" der Zeile ist die Zeile wieder ausgewählt.
Kann es sein, dass für das Image ebenfalls die DraggedTypes, und die Funktionen implementiert werden müssen oder habe ich was übersehen (a'la "hey, Image, reich mal die Drop-Anfrage an die Superview weiter"
)? Die drei Labels der NSTableCellView benötigen dies offensichtlich nicht.
Ein ähnliches Verhalten habe ich auch bei NSOutlineView beobachtet: Drag'n'Drop funktioniert prima solange ich nicht auf das Image des jeweiligen Eintrags komme.
Ich habe bei meiner Anwendung die Möglichkeit implementiert, Dateien mittels Drag'n'Drop auf die viewbased NSTableview zu ziehen. Die von der NSTableView verwendete NSTableCellView beinhaltet drei Labels (NSTextFieldCell) und ein Image (NSImageCell). Die erlaubten DragTypes habe ich direkt in der verwendeten SubClass von NSTableView definiert
Quellcode
- required init?(coder: NSCoder) {
- super.init(coder: coder)
- if #available(OSX 10.13, *) {
- registerForDraggedTypes([NSPasteboard.PasteboardType.fileURL])
- } else {
- registerForDraggedTypes([kUTTypeFileURL as NSPasteboard.PasteboardType])
- }
- self.draggingDestinationFeedbackStyle = NSTableView.DraggingDestinationFeedbackStyle.regular
- }
- deinit {
- unregisterDraggedTypes()
- }
func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo, row: Int, dropOperation: NSTableView.DropOperation) -> Bool
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation
erledigt. Soweit funktioniert alles prima bis auf eine nervige Kleinigkeit: Bewege ich beim Drag-Vorgang die Maus über das Image in der jeweiligen Zeile wird Auswahl der Zeile aufgehoben. Also einfach gesagt: ich bewege den Mauszeiger bei einem Drag-Vorgang in eine Zeile der TableView -> Die Zeile wird wie gewünscht ausgewählt und bleibt dies auch ... bis ich innerhalb der Zeile in den Bereich des Images komme ... Schwups, die Auswahl ist wieder weg. Bewege ich die Maus wieder aus dem Bereich des Images in den "Rest" der Zeile ist die Zeile wieder ausgewählt.
Kann es sein, dass für das Image ebenfalls die DraggedTypes, und die Funktionen implementiert werden müssen oder habe ich was übersehen (a'la "hey, Image, reich mal die Drop-Anfrage an die Superview weiter"
![:)](https://osxentwicklerforum.de/wcf/images/smilies/smile.png)
Ein ähnliches Verhalten habe ich auch bei NSOutlineView beobachtet: Drag'n'Drop funktioniert prima solange ich nicht auf das Image des jeweiligen Eintrags komme.