首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有NSTokenFieldCell跟踪功能的MacOS Swift NSTableView从哪个列开始拖动

具有NSTokenFieldCell跟踪功能的MacOS Swift NSTableView从哪个列开始拖动
EN

Stack Overflow用户
提问于 2021-06-25 15:00:06
回答 1查看 27关注 0票数 0

我有一个简单的测试程序,它有一个2列的NSTableView (基于视图),两列的单元格都设置为NSTokenFieldCell。我在这个控制器中也有一个NSTokenField

我希望能够将令牌从表拖放到字段中。当我有1列时,这是正常工作的。现在我有两列,我需要知道要将哪个标记添加到字段

示例代码:

代码语言:javascript
复制
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate, NSTokenFieldDelegate {

    @IBOutlet weak var tableView: NSTableView!
    @IBOutlet weak var tokenField: NSTokenField!

let tokens = ["tok1","tok2","tok3","tok1","tok2","tok3","tok1","tok2","tok3","tok1","tok2","tok3","tok1","tok2","tok3","tok1","tok2","tok3"]
    let tokens2 = ["image","date","time","folder"]
    override func viewDidLoad() {
        super.viewDidLoad()

   }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

 func numberOfRows(in tableView: NSTableView) -> Int {
        return max(tokens.count,tokens2.count)
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        guard let vw = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: self) as? NSTableCellView else {
            return nil
        }
        if tableColumn?.title == "Tokens" {
            vw.textField?.stringValue = tokens[row]
        }
        else
        {
            if row < tokens2.count {
                vw.textField?.stringValue = tokens2[row]
            }
            else {
            vw.textField?.stringValue = ""
            }
        }
        return vw
    }

// The bit where I need help 

func tableView(
        _ tableView: NSTableView,
        pasteboardWriterForRow row: Int)
        -> NSPasteboardWriting?
    {
            return tokens[row] as NSString //Here I need to return tokens2[row] if a token from column 2 was dragged and dropped
          
        }
    }

我不能确定的是哪一列被点击来启动拖放tableView.clickedColumn总是没有任何其他功能,例如这个-1 \f25 fire func tableView(_ tableView: NSTableView, updateDraggingItemsForDrag draggingInfo: NSDraggingInfo)

更新:我可以让这个函数在我开始拖动操作时立即触发:func tableView(_ tableView: NSTableView, draggingSession session: NSDraggingSession, willBeginAt screenPoint: NSPoint, forRowIndexes rowIndexes: IndexSet)

我尝试过捕获mouseDown,但也没有任何成功的机会。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 17:42:40

一旦设置了NTTokenFieldCell,NSTokenFieldCell就没有将其属性设置为selectable,并且NSTokenField按预期工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68126760

复制
相关文章

相似问题

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