NSCollectionView, как отправить представленный объект в код при двойном щелчке?

Я впервые использую привязки в основном хранилище данных с отношением «один ко многим» для моих сущностей, я отображаю подэлементы, используя NSCollectionView, который показывает изображение и заголовок.

Объекты:

Subitems Array Controller (NSArrayController)
Collection View Item (NSCollectionViewItem)

Элементы управления:

NSCollectionView
NSView (for the item)
   NSImageView
   NSTextField

Я привязал NSImageView к элементу представления коллекции с путем к ключу модели, представленным Object.imagePath, и преобразователем значений. Все это хорошо работает.

Что я хочу сделать, так это обнаружить двойной щелчок по элементу в коде и получить доступ к представленному объекту элемента с двойным щелчком.

Я попытался создать подкласс NSImageView и переопределить событие мыши для события щелчка, которое сработало, но затем я не смог получить отсюда доступ к контексту управляемого объекта и выбранному объекту. Я не уверен, как это сделать правильно.

Спасибо за любую помощь, я понимаю, что это базовые вещи, и я должен делать что-то неправильно с реализацией привязок.


person GeoffCoope    schedule 25.02.2014    source источник
comment
Можно ли создать подкласс NSImageView в моем контроллере представления, чтобы было две реализации, которые затем дали бы мне доступ к manageObjectContect. Или я должен смотреть на передачу manageObjectContext из класса в класс. Я заметил, что пример кода IconCollection делает это с NSBox для целей выбора, которые я делаю исключительно в IB в данный момент.   -  person GeoffCoope    schedule 25.02.2014


Ответы (1)


Реализуйте подкласс для вашего элемента представления коллекции, скажем, CustomCollectionViewItem, и измените класс элемента представления коллекции в IB.

Вы также подкласс NSImageView, в этом классе обрабатывается двойной щелчок. Создайте объект делегата слабой ссылки и привяжите этот делегат к вашему CustomCollectionViewItem в IB.

Теперь, когда вы дважды щелкаете, попросите делегата вызвать любой метод вашего CustomCollectionViewItem, и в CustomCollectionViewItem у вас есть доступ к представленному объекту.

Теперь проблема заключается в том, как передать это фактическому классу контроллера. Вам нужно снова создать делегат слабой ссылки в CustomCollectionViewItem и привязать этот делегат к классу Main Controller в IB.

Таким образом, когда CustomCollectionViewItem получает вызов от подкласса NSImageView, вызовите метод класса основного контроллера и передайте представленный объект.

person Aneesh Dangayach    schedule 01.04.2014
comment
Спасибо за ответ, вот как я заработал в конце. Просто передайте метод вверх по цепочке делегатов с помощью PerformSelector, после 3 прыжков я попаду в свой делегат модели данных, где я могу обработать перенаправленный представленный объект. - person GeoffCoope; 04.04.2014