NSCOLLECTVIEWVIE, ¿cómo enviar RepresentedObject a codificar en doble clic?
-
21-12-2019 - |
Pregunta
Estoy usando enlaces por primera vez en un almacén de datos principales con una relación de una a muchas personas en mis entidades, muestro los subitems usando un NSCOLLECTVIEWVIEW que muestra una imagen y un título.
Los objetos son:
Subitems Array Controller (NSArrayController)
Collection View Item (NSCollectionViewItem)
los controles son:
NSCollectionView
NSView (for the item)
NSImageView
NSTextField
He encado el elemento NSImageView para recoger la visión con la ruta de la clave del modelo como RepresentEdObject.ImagePath y un transformador de valor.Todo esto funciona bien.
Lo que quiero hacer es detectar un doble clic en el elemento en el código y obtener acceso a la RepresentedObject del elemento con doble clic.
Intenté subclase NSImageView y anulará el evento del mouse para un evento de clic que funcionó, pero luego no pude acceder desde aquí al contexto de administración y el objeto seleccionado.No estoy seguro de cómo hacer esto de la manera correcta.
Gracias por cualquier ayuda, entiendo que esto son cosas básicas y debo estar haciendo algo incorrecto con la implementación de los enlaces.
Solución
Implementar subclase para su elemento Vista de colección, digamos CustomSCollectViewItem y cambie la clase del elemento Vista de colección en el IB.
Subclase You nsimageView también, en esta clase maneja el doble clic.Cree un objeto de delegado de referencia débil y vincule a este delegado a su CustomScollectViewItem en IB.
Ahora, cuando hace clic en Pedirle a la delegada que llame a cualquier método de su CustomSCollectViewItem y en CustomSCollectViewIdem, tiene acceso al RepresentEdObject.
Ahora, el problema es cómo pasar aún más a la clase real del controlador.Debe nuevamente crear un delegado de referencia débil en CustomSCollectViewItem y vincule a este delegado a la clase principal del controlador en IB.
Entonces, cuando CustomCollectViewIdem recibe una invocación de la subclase de NSImageView, llame al método de la clase del controlador principal y pase el REPRESENTEBJECT.