首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSBrowser拖放飞快

NSBrowser拖放飞快
EN

Stack Overflow用户
提问于 2018-10-12 20:34:43
回答 1查看 239关注 0票数 1

我试图在一个带有NSBrowser控件的快速4 Macos应用程序中进行拖放工作。我目前掌握的代码如下:

代码语言:javascript
复制
    // 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,所以看起来值已经保存到了pasteboard。

但是其他两个函数并没有被调用。因此,虽然我可以看到NSBrowser中的行正在被拖动,但该控件似乎没有注册以接受下拉列表。我还在viewDidLoad函数中添加了这个

代码语言:javascript
复制
quizBrowser.setDraggingSourceOperationMask(NSDragOperation.generic, forLocal: true)

有人知道我错过了什么吗?有谁有一个快速的3/4的例子拖放使用的NSBrowser,他们要分享?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 22:34:16

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

代码语言:javascript
复制
func registerForDraggedTypes(_ newTypes: [NSPasteboard.PasteboardType])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52786664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档