NSView Subviews прерывая операцию перетаскивания

У меня есть NSView, который зарегистрирован для операции перетаскивания.

В этом представлении у меня есть подкласс NSScrollView, который сам по себе имеет NSImageView в нем.

При перетаскивании на исходный NSView все в порядке, за исключением случаев, когда я перетаскиваю вышеупомянутый NSImageView, который, кажется, прерывает перетаскивание, и я не могу попасть на него (или фактически на вид под ним).

NSScrollView, по-видимому, игнорирует перетаскивание и позволяет ему пройти к базовому NSView, но как я могу сделать это для NSImageView, чтобы перетаскивание регистрировалось через себя, его суперпредставление (NSScrollView) и на базовый NSView.

2 ответа

Вы можете отменить регистрацию NSImageView в качестве места перетаскивания. Его суперпредставление будет обрабатывать сеанс перетаскивания, если оно настроено для этого.

[imageView unregisterDraggedTypes];

О, спасибо большое @Steven!

Свифт 4.2 а @IBOutlets:

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

Длинная история:
У меня было это NSCollectionView, который загрузил кастом NSCollectionViewItem из XIB файл.

Коллекция принимает операции удаления (collectionView.registerForDraggedTypes([.fileURL])).
Но как только что-то упало в нее и таможенная ячейка была "снята с производства" (makeItem(withIdentifier:for:)) - операции отбрасывания перестали работать над этой конкретной ячейкой.

unregisterDraggedTypes() действительно исправляет проблему.

Другие вопросы по тегам