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

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

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

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

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


person mootymoots    schedule 24.01.2011    source источник


Ответы (2)


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

[imageView unregisterDraggedTypes];
person Steven Vandeweghe    schedule 12.09.2011

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

Swift 4.2 и @IBOutlets:

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

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

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

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

person backslash-f    schedule 14.09.2018