NSCollectionViewItem double-cliquez sur l'action?
-
20-09-2019 - |
Question
Comment puis-je définir une action lorsque un double utilisateur clique un de NSCollectionViewItem
. NSTableView
, par exemple, a la méthode de setDoubleAction
. Y at-il quelque chose de similaire pour NSCollectionView
?
Merci
La solution
Vous voudrez probablement gérer cela dans votre NSCollectionViewItem
, plutôt que le NSCollectionView
lui-même (pour travailler votre analogie NSTableView
).
Autres conseils
Je sais que cette question est ancienne, mais il arrive que le troisième résultat sur Google en ce moment, et je l'ai trouvé une méthode différente et très simple que je ne l'ai pas vu ailleurs documenté. (Je ne suis pas juste besoin de manipuler l'élément représenté, mais qui ont un travail plus complexe à faire dans mon application.)
NSCollectionView
hérite de NSView
, de sorte que vous pouvez simplement créer une sous-classe personnalisée et passer outre mouseDown
. Ce n'est pas tout à fait sans pièges - vous devez vérifier le nombre de clics, et convertir le point de la fenêtre principale à votre collection Vue de coordonnées, avant d'utiliser la méthode de NSCollectionView
de 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)
...
Cela se sent comme si je l'ai finalement trouvé la méthode d'Apple destiné à être utilisé - sinon, il n'y a aucune raison pour indexPathForItem(at:)
d'exister.