NSCollectionViewItem действие двойного щелчка? - PullRequest
5 голосов
/ 12 октября 2009

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 июля 2017

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

NSCollectionView наследуется от NSView, поэтому вы можете просто создать собственный подкласс и переопределить mouseDown. Это не совсем без ловушек - вам нужно проверить количество кликов и преобразовать точку из главного окна в координату представления вашей коллекции, прежде чем использовать NSCollectionView s indexPathForItem метод:

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:).

2 голосов
/ 12 октября 2009

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

...