NSCollectionViewItem 双击操作?

发布于 2024-08-06 22:45:33 字数 142 浏览 4 评论 0原文

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

谢谢

How do I set an action for when a user double clicks an NSCollectionViewItem. NSTableView, for example, has the setDoubleAction method. Is there something similar for NSCollectionView?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

财迷小姐 2024-08-13 22:45:33

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

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

I know this question is ancient, but it comes up as the third result on Google right now, and I've found a different and very straightforward method that I haven't seen documented elsewhere. (I don't just need to manipulate the represented item, but have more complex work to do in my app.)

NSCollectionView inherits from NSView, so you can simply create a custom subclass and override mouseDown. This is not completely without pitfalls - you need to check the click count, and convert the point from the main window to your collection view's coordinate, before using NSCollectionView's indexPathForItem method:

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)
...

This feels as if I've finally found the method Apple intended to be used - otherwise, there's no reason for indexPathForItem(at:) to exist.

何处潇湘 2024-08-13 22:45:33

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

You'd probably want to handle this in your NSCollectionViewItem, rather than the NSCollectionView itself (to work off your NSTableView analogy).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文