Azione doppio clic di NSCollectionViewItem?
-
20-09-2019 - |
Domanda
Come posso impostare un'azione per quando un utente fa doppio clic su un file NSCollectionViewItem
. NSTableView
, ad esempio, ha il setDoubleAction
metodo.C'è qualcosa di simile per NSCollectionView
?
Grazie
Soluzione
Si sarebbe probabilmente desidera gestire questo nella vostra NSCollectionViewItem
, piuttosto che la NSCollectionView
in sé (per lavorare fuori il vostro analogia NSTableView
).
Altri suggerimenti
So che questa domanda è antica, ma in questo momento appare come il terzo risultato su Google e ho trovato un metodo diverso e molto semplice che non ho visto documentato altrove.(Non ho solo bisogno di manipolare l'elemento rappresentato, ma ho un lavoro più complesso da svolgere nella mia app.)
NSCollectionView
eredita da NSView
, quindi puoi semplicemente creare una sottoclasse personalizzata e sovrascriverla mouseDown
.Questo non è del tutto privo di insidie: devi controllare il conteggio dei clic e convertire il punto dalla finestra principale alle coordinate della vista della raccolta, prima di utilizzare NSCollectionView
'S indexPathForItem
metodo:
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)
...
Mi sembra di aver finalmente trovato il metodo che Apple intendeva utilizzare, altrimenti non ce n'è motivo indexPathForItem(at:)
esistere.