【问题标题】:NSCollectionView - dragging shows a "hole" - want it to look lke the FinderNSCollectionView - 拖动显示一个“洞” - 希望它看起来像 Finder
【发布时间】:2018-05-16 23:46:56
【问题描述】:

我有一个 NSCollectionView。当我拖动项目时(在视图周围或视图外),我得到了正确的外观,但是在拖动时单元格是空的(参见下面的动画 GIF)。期望的行为类似于 Finder - 即图标应保持在原位,并且除图标外还会显示拖动的图像。

我尝试了很多方法都无济于事。例如,我尝试在 sourceOperationMaskForDraggingContext 中将拖动操作设置为 Copy。不记得其他的了——他们失败了,所以我删除了实验。拖动完成后,所有内容都会正确更新,但在拖动过程中它看起来不对。

是否有(希望是简单的)方法让 NSCollectionView 在拖动时更像 Finder?谢谢。

[

【问题讨论】:

    标签: macos drag-and-drop nscollectionview


    【解决方案1】:

    这似乎与Prevent NSCollectionView 'lifting' an item during drag本质上是同一个问题

    我最初的解决方案是为集合视图项使用自定义视图。在我的子类中,我覆盖setHidden: 以防止在拖动项目时集合视图隐藏我的项目视图。这有一些不良的副作用。似乎 NSCollectionView 在更改布局时也会隐藏项目视图。

    下一个想法(到目前为止)在我的应用程序中运行良好。我在拖动开始时取消隐藏项目视图。

    @interface HGImagesCollectionViewDelegate : NSObject <NSCollectionViewDelegate>
    
    @end
    
    @implementation HGImagesCollectionViewDelegate
    
    - (void)collectionView:(NSCollectionView *)collectionView
           draggingSession:(NSDraggingSession *)session
          willBeginAtPoint:(NSPoint)screenPoint
      forItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
    {
        //  Prevent item from being hidden (creating a hole in the grid) while being dragged
        for (NSIndexPath *indexPath in indexPaths) {
            [[[collectionView itemAtIndexPath:indexPath] view] setHidden:NO];
        }
    
        // …
    
    }  
    
    @end
    

    【讨论】:

    • 谢谢 - 我刚刚尝试过,它似乎会导致一些意想不到的行为(例如,大多数时候,我不能再拖动,并且选择逻辑行为不端)。由于您的更改非常简单,因此可能是此更改与我的网格的整体复杂性之间的交互。不过,谢谢你的想法。
    • 我已经用一个版本的代码更新了我的帖子,以避免我后来遇到的副作用。
    • 是的,这个新的实现也对我有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2012-11-18
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多