【问题标题】:Drag selecting in NSCollectionView from inside of items从项目内部拖动选择 NSCollectionView
【发布时间】:2018-07-23 17:22:41
【问题描述】:

我在 NSCollectionView 中展示了一系列项目。选择和多选都启用。

用户可以通过拖动选择项目(即通过拖动标记项目)。但是,当用户开始从集合视图背景或项目之间的空间(而不是项目上)拖动时,这会起作用,但我希望在项目上开始拖动时也能做到这一点。

如果我们将文本和图像视为单个项目,我想要这张照片。

图片来源:http://osxdaily.com/2013/09/16/select-multiple-files-mac-os-x/

提前谢谢你。

【问题讨论】:

  • 到目前为止你做了什么?
  • 关键是直到这个状态大部分工作都是通过 IB 完成的,而 Datasource 只是显示项目。我想在这里实现的是一个额外的功能,它在 NSCollectionView 中默认没有实现。
  • 你做了什么来实现拖放?向我们展示您的代码。
  • 这不是拖放,它是像 finder 应用程序那样拖动选择来标记项目,但我想让它在用户开始拖动项目时工作。它与事件有关,但我不知道如何。

标签: cocoa nscollectionview nscollectionviewitem


【解决方案1】:

在项目视图的类中实现hitTest(_:) 以使项目“透视”以进行点击。当用户在项目视图中单击时,返回集合视图而不是项目视图。

override func hitTest(_ point: NSPoint) -> NSView? {
    var view = super.hitTest(point)
    if view == self {
        repeat {
            view = view!.superview
        } while view != nil && !(view is NSCollectionView)
    }
    return view;
}

【讨论】:

  • 它做得很好,感谢您的帮助
  • 我怎么能说除非选择矩形覆盖或与视图的上半部分相交,否则不要选择项目? I can add this logic to your code but this works only for the first item that initiate the drag selection and when selection rectangle intersects with border of another item view, it gets selected.
猜你喜欢
  • 2019-01-08
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多