【问题标题】:NSCollectionViewItem double-click action?NSCollectionViewItem 双击动作?
【发布时间】:2019-04-09 04:22:29
【问题描述】:

如何设置用户双击NSCollectionViewItem 时的操作。例如,NSTableView 具有 setDoubleAction 方法。 NSCollectionView 有类似的吗?

谢谢

【问题讨论】:

标签: objective-c cocoa nscollectionview nscollectionviewitem


【解决方案1】:

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

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

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:) 没有理由存在。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,我最终只是继承了 NSCollectionView 的原型 NSView 并添加了 mouseDown 处理程序。
    猜你喜欢
    • 2012-12-07
    • 2011-02-03
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多