NSView子视图中断拖动操作

时间:2011-01-24 13:39:34

标签: objective-c cocoa drag-and-drop nsview

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

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

当拖动到原始的NSView上时,一切都很好,除了当我拖过前面提到的NSImageView时,它似乎插入了拖拽而我不能掉到它上面(或者实际上是它下面的视图。

NSScrollView似乎忽略了拖动并允许它进入底层的NSView,但我怎么能为NSImageView做到这一点,以便拖放注册自己,它的superview(NSScrollView)和底层的NSView。

2 个答案:

答案 0 :(得分:41)

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

[imageView unregisterDraggedTypes];

答案 1 :(得分:1)

哦,非常感谢@Steven!

Swift 4.2 @IBOutlets

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

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

该集合接受放置操作(collectionView.registerForDraggedTypes([.fileURL]))。
但是,一旦有东西放进去,并且自定义单元格被“ 出队”(makeItem(withIdentifier:for:))了,放置操作就停止了在该特定单元格之上的工作。

unregisterDraggedTypes()确实解决了该问题。