0

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

我希望能够将令牌从表中拖放到字段中。当我有 1 列时,它运行良好。现在我有 2 列我需要知道要添加到字段中的标记

示例代码:


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没有其他功能,比如这个火 func tableView(_ tableView: NSTableView, updateDraggingItemsForDrag draggingInfo: NSDraggingInfo)

更新:我可以在开始拖动操作后立即触发此功能: func tableView(_ tableView: NSTableView, draggingSession session: NSDraggingSession, willBeginAt screenPoint: NSPoint, forRowIndexes rowIndexes: IndexSet) 截屏

我试图捕捉mouseDown,但也没有任何运气。任何指针?

4

1 回答 1

0

一旦设置了 NTTokenFieldCell 并且 NSTokenField 按需要工作,NSTokenFieldCell 就没有将其属性设置为可选。

于 2021-06-25T09:42:39.700 回答