Получить индекс представления внутри NSCollectionView? - PullRequest
7 голосов
/ 22 октября 2011

Я разработал приложение для Mac OS X Lion, используя его новый NSTableView, основанный на представлениях, но, поскольку я хочу перенести все приложение на Snow Leopard, я пытаюсь найти лучший способ эмулировать такое представление таблицы.До сих пор я создал NSCollectionView, и все в порядке, за исключением того факта, что я не могу получить индекс представления, из которого инициируется событие нажатия кнопки.В Lion у меня есть следующая функция:

- (IBAction)buttonClick:(id)sender

, поэтому я могу получить индекс представления внутри табличного представления, используя метод (я не могу вспомнить его имя), например

- (NSInteger)rowForView:(NSView *)aView

с aView является супервизором отправителя, но я не смог найти что-то похожее для представления коллекции ... Единственный "полезный" метод, кажется,

- (NSCollectionViewItem *)itemAtIndex:(NSUInteger)index

(или что-то подобное), но этоне могу помочь мне, так как он возвращает NSCollectionViewItem, и я даже не могу получить к нему доступ, зная только соответствующее представление!

Ответы [ 5 ]

4 голосов
/ 24 октября 2011

Внутри кнопкиНажмите, попробуйте этот код:

id collectionViewItem = [sender superview];
NSInteger index = [[collectionView subviews]  indexOfObject:collectionViewItem];
return index;

Надеюсь, это поможет:)

2 голосов
/ 02 декабря 2012

Geesh!Оба этих подхода имеют проблемы.Я могу видеть, как может работать первое включение, но обратите внимание, что «collectionViewItem» на самом деле является представлением, а НЕ collectionViewItem, который является контроллером представления.

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

1 голос
/ 22 октября 2011

Как насчет чего-то вроде:

id obj = [collectonViewItem representedObject];
NSInteger index = [[collectionView contents] indexOfObject:obj];
0 голосов
/ 09 октября 2015
  1. использовать NSArrayController для привязки к NSCollectionView,

  2. используйте collectonViewItem.representedObject, чтобы получить собственную модель, определенную вами.

  3. сохранить и получить индекс в вашей пользовательской модели.

Это работает для меня.

0 голосов
/ 28 августа 2013

Как я и предложил здесь: Как обрабатывать нажатие кнопки из NSCollectionView

Я бы сделал это так (потому что кнопка, которую вы хотите нажать, должна быть связана с соответствующей моделью, поэтому представляемый объект):

  1. Добавить метод к модели вашего collectionViewItem (например, buttonClicked)
  2. Свяжите цель кнопки с коллекцией Посмотреть объект
  3. При привязке задайте путь модели ключа к: представленный объект
  4. При привязке установите selectorname в: имя метода, которое вы выбрали ранее (например, buttonClicked)
  5. Добавьте протокол к вашей модели, если вы должны сообщить делегату или установить шаблон наблюдателя
...