gpt4 book ai didi

swift - NSBrowser 快速拖放

转载 作者:行者123 更新时间:2023-11-28 07:38:47 25 4
gpt4 key购买 nike

我正在尝试使用 NSBrowser 控件在 swift 4 Macos 应用程序中进行拖放操作。我目前的代码如下所示:

    // 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)

有谁知道我错过了什么?有没有人有使用 NSBrowser 进行拖放的快速 3/4 示例并愿意分享?

谢谢

最佳答案

在 View 可以接收拖动操作之前,您需要通过调用注册它可以接受的数据类型

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

关于swift - NSBrowser 快速拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com