NSView Subviews 中断拖拽操作

Posted

技术标签:

【中文标题】NSView Subviews 中断拖拽操作【英文标题】:NSView Subviews interrupting drag operation 【发布时间】:2011-06-14 12:50:51 【问题描述】:

我有一个为拖动操作注册的 NSView。

在那个视图中,我有一个子类 NSScrollView,它本身就有一个 NSImageView。

当拖到原来的 NSView 上时,一切都很好,除了当我拖到前面提到的 NSImageView 上时,这似乎中断了拖拽,我不能放到它上面(或者实际上是它下面的视图。

NSScrollView 似乎忽略了拖动并允许它通过底层 NSView,但是我怎样才能为 NSImageView 做到这一点,以便 Drag/Drop 通过自身注册,它是超级视图(NSScrollView)并进入底层NSView。

【问题讨论】:

【参考方案1】:

您可以将 NSImageView 取消注册为拖动目标。然后,它的 superview 将处理拖动会话,如果它设置为这样做的话。

[imageView unregisterDraggedTypes];

【讨论】:

【参考方案2】:

哦,非常感谢@Steven!

Swift 4.2@IBOutlets

@IBOutlet private weak var imageView: NSImageView! 
  didSet 
    imageView.unregisterDraggedTypes()
  

长篇大论: 我有这个NSCollectionView,它从XIB 文件中加载了一个自定义NSCollectionViewItem

该集合接受删除操作 (collectionView.registerForDraggedTypes([.fileURL]))。 但是,一旦将某些东西放入其中并且自定义单元格“dequeued”(makeItem(withIdentifier:for:)) - 删除操作在该特定单元格上方停止工作。

unregisterDraggedTypes() 确实解决了这个问题。 ?

【讨论】:

以上是关于NSView Subviews 中断拖拽操作的主要内容,如果未能解决你的问题,请参考以下文章

硬件是如何发现与响应中断事件的?操作系统是如何处理中断的

操作系统中断的运行细节

操作系统—中断和异常

操作系统—中断和异常

操作系统:中断和异常

操作系统复习