NSCollectionView, как отправить представленный объект в код по двойному клику?
Я впервые использую привязки в основном хранилище данных с отношением один ко многим в моих сущностях, я отображаю подэлементы, используя NSCollectionView, который показывает изображение и заголовок.
Объекты:
Subitems Array Controller (NSArrayController)
Collection View Item (NSCollectionViewItem)
Управление:
NSCollectionView
NSView (for the item)
NSImageView
NSTextField
Я связал NSImageView с элементом представления коллекции с путем ключа модели, как представлено Object.imagePath и преобразователем значения. Это все хорошо работает.
Однако я хочу обнаружить двойной щелчок по элементу в коде и получить доступ к представленному объекту объекта, по которому дважды щелкнули.
Я попытался создать подкласс NSImageView и переопределить событие мыши для события щелчка, которое сработало, но затем я не смог получить доступ отсюда к контексту ManagedObject и выбранному объекту. Я не уверен, как это сделать правильно.
Спасибо за любую помощь, я понимаю, что это основные вещи, и я должен делать что-то неправильно с реализацией привязок.
1 ответ
Реализуйте подкласс для вашего элемента представления коллекции, скажем CustomCollectionViewItem и измените класс элемента представления коллекции в IB.
Подкласс вы NSImageView также, в этом классе обрабатывать двойной щелчок. Создайте объект делегата со слабой ссылкой и привяжите этот делегат к вашему CustomCollectionViewItem в IB.
Теперь, когда вы дважды щелкнете, попросите делегата вызвать любой метод вашего CustomCollectionViewItem, и в CustomCollectionViewItem вы получите доступ к представленному объекту.
Теперь проблема состоит в том, как далее передать это фактическому классу контроллера. Вам необходимо снова создать делегат со слабой ссылкой в CustomCollectionViewItem и связать этот делегат с классом Main Controller в IB.
Таким образом, когда CustomCollectionViewItem получает вызов из подкласса NSImageView, затем вызывается метод класса Main Controller и передается представляемый объект.