Как установить действие, когда пользователь дважды щелкает NSCollectionViewItem
. NSTableView
, например, имеет метод setDoubleAction
. Есть что-то подобное для NSCollectionView
?
Спасибо
Как установить действие, когда пользователь дважды щелкает NSCollectionViewItem
. NSTableView
, например, имеет метод setDoubleAction
. Есть что-то подобное для NSCollectionView
?
Спасибо
Вы, вероятно, захотите обработать это в своем NSCollectionViewItem
, а не в самом NSCollectionView
(чтобы отработать аналогию с NSTableView
).
Я знаю, что этот вопрос древний, но сейчас он появляется как третий результат в Google, и я нашел другой и очень простой метод, который я не видел нигде. (Мне нужно не только манипулировать представленным элементом, но и выполнять более сложную работу в моем приложении.)
NSCollectionView
наследуется от NSView
, поэтому вы можете просто создать собственный подкласс и переопределить mouseDown
. Это не совсем без подводных камней - вам нужно проверить количество кликов и преобразовать точку из главного окна в координату представления вашей коллекции, прежде чем использовать метод indexPathForItem
NSCollectionView
:
override func mouseDown(with theEvent: NSEvent) {
if theEvent.clickCount == 2 {
let locationInWindow = theEvent.locationInWindow
let locationInView = convert(locationInWindow, from: NSApplication.shared.mainWindow?.contentView)
if let doubleClickedItem = indexPathForItem(at: locationInView){
// handle double click - I've created a DoubleClickDelegate
// (my collectionView's delegate, but you could use notifications as well)
...
Такое ощущение, что я наконец-то нашел метод, который Apple намеревалась использовать — в противном случае нет причин для существования indexPathForItem(at:)
.