Problem mit Drop auf viewbased NSTableView

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

  • Problem mit Drop auf viewbased NSTableView

    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


    Quellcode

    1. required init?(coder: NSCoder) {
    2. super.init(coder: coder)
    3. if #available(OSX 10.13, *) {
    4. registerForDraggedTypes([NSPasteboard.PasteboardType.fileURL])
    5. } else {
    6. registerForDraggedTypes([kUTTypeFileURL as NSPasteboard.PasteboardType])
    7. }
    8. self.draggingDestinationFeedbackStyle = NSTableView.DraggingDestinationFeedbackStyle.regular
    9. }
    10. deinit {
    11. unregisterDraggedTypes()
    12. }
    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.