4

Как установить действие, когда пользователь дважды нажимает на элемент NSCollectionViewItem. Например, NSTableView имеет метод setDoubleAction. Есть ли что-то подобное для NSCollectionView?NSCollectionViewItem с двойным щелчком мыши?

Благодаря

+2

этот [блог]: http://www.springenwerk.com/2009/12/double-click-and-nscollectionview.html поможет вам. – user1377049

ответ

2

Вы, вероятно, хотите, чтобы справиться с этим в вашем NSCollectionViewItem, а не сам NSCollectionView (для работы с вашей NSTableView аналогию).

+1

Спасибо, я закончил просто подклассирование прототипа NSView из NSCollectionView и добавление обработчика mouseDown. – indragie

1

Я знаю, что этот вопрос древний, но сейчас это третий результат в Google, и я нашел другой и очень простой метод, который я не видел в других местах. (Мне не нужно просто манипулировать представленным элементом, но у меня сложнее работать в моем приложении.)

NSCollectionView наследует от NSView, поэтому вы можете просто создать собственный подкласс и переопределить mouseDown. Это не совсем без ошибок - вы должны проверить количество кликов, и преобразовать точку из главного окна в вашем CollectionView координаты, перед использованием метода 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 :) существует.

Смежные вопросы