NSView Subviews прерывая операцию перетаскивания - PullRequest
10 голосов
/ 24 января 2011

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

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

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

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

Ответы [ 2 ]

41 голосов
/ 12 сентября 2011

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

[imageView unregisterDraggedTypes];
1 голос
/ 14 сентября 2018

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

Swift 4,2 и @IBOutlets:

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

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

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

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

...