NSBrowser перетаскивание Swift - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь заставить работать методом перетаскивания в быстром приложении Macos 4 с элементом управления NSBrowser.Код, который у меня есть на данный момент, выглядит следующим образом:

    // Drag and Drop
func browser(_ browser: NSBrowser,
             canDragRowsWith rowIndexes: IndexSet,
             inColumn column: Int,
             with event: NSEvent) -> Bool {

    if column != 0 {
        quizBrowser.canDragRows(with: rowIndexes, inColumn: column, with: event)
        return true
    }

    return false
}

func browser(_ browser: NSBrowser,
             writeRowsWith rowIndexes: IndexSet,
             inColumn column: Int,
             to pasteboard: NSPasteboard) -> Bool {

    if column != 0 {

        let row: Int = rowIndexes.last!
        let item = quizBrowser.item(atRow: row, inColumn: column) as? BrowserItem

        pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: self)
        pasteboard.setString(item!.name, forType: NSPasteboard.PasteboardType.string)

        return true
    }

    return false
}

func browser(_ browser: NSBrowser,
             validateDrop info: NSDraggingInfo,
             proposedRow row: UnsafeMutablePointer<Int>,
             column: UnsafeMutablePointer<Int>,
             dropOperation: UnsafeMutablePointer<NSBrowser.DropOperation>) -> NSDragOperation {

    return NSDragOperation.move
}

func browser(_ browser: NSBrowser,
             acceptDrop info: NSDraggingInfo,
             atRow row: Int,
             column: Int,
             dropOperation: NSBrowser.DropOperation) -> Bool {

    let pboard = info.draggingPasteboard
    let rowData = pboard().data(forType: NSPasteboard.PasteboardType.string)

    return true
}

Я вижу, что первые две функции называются [canDragRowsWith и writeRowswith], а команда setString возвращает true, поэтому выглядиткак будто значение было сохранено в монтажном столе.

Но две другие функции не вызываются.Поэтому, хотя я вижу, как строка в NSBrowser перетаскивается, похоже, что элемент управления не зарегистрирован, чтобы принять удаление.Я также добавил это в функцию viewDidLoad

quizBrowser.setDraggingSourceOperationMask(NSDragOperation.generic, forLocal: true)

У кого-нибудь есть идеи, что мне не хватает?У кого-нибудь есть быстрый 3/4 пример перетаскивания с использованием NSBrowser, которым они хотят поделиться?

Спасибо

1 Ответ

0 голосов
/ 13 октября 2018

Прежде чем представление может получить операцию перетаскивания, необходимо зарегистрировать типы данных, которые оно может принять, вызвав

func registerForDraggedTypes(_ newTypes: [NSPasteboard.PasteboardType])
...