NSCollectionViewItem doble clic en la acción?
-
20-09-2019 - |
Pregunta
¿Cómo puedo configurar una acción para cuando un usuario hace doble clic una NSCollectionViewItem
. NSTableView
, por ejemplo, tiene el método setDoubleAction
. ¿Hay algo similar para NSCollectionView
?
Gracias
Solución
probablemente querrá manejar esto en su NSCollectionViewItem
, en lugar de la NSCollectionView
en sí (para trabajar fuera de su analogía NSTableView
).
Otros consejos
Sé que esta pregunta es antiguo, pero lo hará como el tercer resultado en Google en este momento, y he encontrado un método diferente y muy sencillo que no he visto documentado en otros lugares. (Yo no sólo tenga que manipular el elemento representado, pero tienen un trabajo más complejo que hacer en mi aplicación.)
NSCollectionView
hereda de NSView
, por lo que simplemente puede crear una subclase personalizada y anular mouseDown
. Esto no es completamente sin trampas - que necesita para comprobar el número de clic, y convertir el punto de la ventana principal para ver su colección de coordenadas, antes de utilizar el método de NSCollectionView
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)
...
Esto se siente como si por fin he encontrado el método de Apple destinado a ser utilizado - de lo contrario, no hay razón para que exista indexPathForItem(at:)
.