【发布时间】:2019-04-09 04:22:29
【问题描述】:
如何设置用户双击NSCollectionViewItem 时的操作。例如,NSTableView 具有 setDoubleAction 方法。 NSCollectionView 有类似的吗?
谢谢
【问题讨论】:
标签: objective-c cocoa nscollectionview nscollectionviewitem
如何设置用户双击NSCollectionViewItem 时的操作。例如,NSTableView 具有 setDoubleAction 方法。 NSCollectionView 有类似的吗?
谢谢
【问题讨论】:
标签: objective-c cocoa nscollectionview nscollectionviewitem
我知道这个问题很古老,但它现在是 Google 上的第三个结果,我发现了一种不同且非常简单的方法,我在其他地方没有看到过记录。 (我不仅需要操作表示的项目,还需要在我的应用程序中完成更复杂的工作。)
NSCollectionView 继承自 NSView,因此您可以简单地创建自定义子类并覆盖 mouseDown。这并非完全没有陷阱——在使用NSCollectionView 的indexPathForItem 方法之前,您需要检查点击次数,并将主窗口中的点转换为集合视图的坐标:
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:) 没有理由存在。
【讨论】:
您可能希望在您的 NSCollectionViewItem 中处理此问题,而不是在 NSCollectionView 本身(以解决您的 NSTableView 类比)。
【讨论】: