Действие двойного щелчка NSCollectionViewItem?

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

Спасибо


person indragie    schedule 12.10.2009    source источник
comment
этот [блог]: springenwerk.com/2009/12/double -click-and-nscollectionview.html поможет вам.   -  person user1377049    schedule 07.05.2012


Ответы (2)


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

person Ben Gottlieb    schedule 12.10.2009
comment
Спасибо, в итоге я просто создал подкласс прототипа NSView для NSCollectionView и добавил обработчик mouseDown. - person indragie; 13.10.2009

Я знаю, что этот вопрос древний, но сейчас он появляется как третий результат в 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:).

person green_knight    schedule 16.07.2017