6

当用户双击一个NSCollectionViewItem. NSTableView,例如,有setDoubleAction方法。有类似的东西NSCollectionView吗?

谢谢

4

2 回答 2

4

我知道这个问题很古老,但它现在是谷歌上的第三个结果,我发现了一种不同且非常简单的方法,我在其他地方没有看到过记录。(我不仅需要操作表示的项目,还需要在我的应用程序中完成更复杂的工作。)

NSCollectionView继承自NSView,因此您可以简单地创建自定义子类并覆盖mouseDown. 这并非完全没有陷阱——在使用NSCollectionView'sindexPathForItem方法之前,您需要检查点击次数,并将主窗口中的点转换为集合视图的坐标:

override func mouseDown(with theEvent: NSEvent) {
    if theEvent.clickCount == 2 {
        let locationInWindow = theEvent.locationInWindow
        let locationInView = convert(locationInWindow, from: NSApplication.shared.mainWindow?.contentView)


        if let doubleClickedItem = indexPathForItem(at: locationInView){
        // handle double click - I've created a DoubleClickDelegate 
        // (my collectionView's delegate, but you could use notifications as well)
...

这感觉好像我终于找到了 Apple 打算使用的方法——否则,就没有存在的理由indexPathForItem(at:)

于 2017-07-16T21:31:20.287 回答
2

您可能希望在您的NSCollectionViewItem,而不是NSCollectionView本身中处理此问题(以消除您的NSTableView类比)。

于 2009-10-12T00:52:16.263 回答