Как вы инициализируете NSCollectionViewItem? - PullRequest
2 голосов
/ 01 июня 2011

Я пытаюсь настроить NSCollectionView, который имеет пользовательский рисунок в отдельных представлениях NSCollectionViewItem. У меня есть изображение, которое мне нужно нарисовать в каждом представлении, но я не могу связать представление обратно с подклассом NSCollectionViewItem в Интерфейсном Разработчике. Есть ли метод init, который я могу использовать с моим NSCollectionViewItem для выполнения операций инициализации? Я пытался реализовать copyWithZone, но я делал что-то не так, потому что получил какой-то вечный цикл. В настоящее время единственная возможность, которую я нашел, установить мои подключения к представлению, это после того, как выбор был изменен с использованием флага - (void) setSelected: (BOOL). Я хочу сделать мой рисунок в виде, но мне нужно изображение из моего представленного объекта в качестве моего источника. Все, что я читаю и связано с NSCollectionView, кажется неполным.

@implementation CollectionViewItem
    -(void)setSelected:(BOOL)flag {
        [super setSelected:flag];
        NSLog(@"setSelected: %d", flag);
        // tell the view that it has been selected
        [(CollectionViewItemView* )[self view] setSelected:flag];
        // This is where I pass my image to my view
        [(CollectionViewItemView* )[self view] setOriginalSprite:[(MyModel* )self.representedObject imageSource]];
        [(CollectionViewItemView* )[self view] setNeedsDisplay:YES];
    }
@end

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Я не могу связать представление обратно с подклассом NSCollectionViewItem в Интерфейсном Разработчике.

Вы должны привязать элементы в своем пользовательском представлении к представителю объекта файла (класс которого должен быть CollectionViewItem). Например, представление вашего изображения будет привязано к владельцу файла с путем ключа модели, равным representedObject.imageSource.

Есть ли метод init, который я могу использовать с моим NSCollectionViewItem для выполнения операций инициализации?

NSCollectionViewItem является подклассом NSViewController. Таким образом, вы можете переопределить -loadView для выполнения пользовательской инициализации. Например,

@implementation CollectionViewItem
…
- (void)loadView {
    [super loadView];
    self.someProperty = someDefaultValue;
}
…
@end
1 голос
/ 01 июня 2011

Я нашел эту документацию - NSCollectionViewItem class

То, что я нашел там, показывает установку ссылки следующим образом:

Setting the Represented Object

    – representedObject Available in Mac OS X v10.5 through Mac OS X v10.5
    – setRepresentedObject: Available in Mac OS X v10.5 through Mac OS X v10.5 

Ваш образец: - (void) setSelected: (BOOL) flag

Я не знаю языка, но является BOOL идентификатором?

setRepresentedObject:

Устанавливает представляемый объект получателя вуказанная модель объекта.(Доступно в Mac OS X v10.5 до Mac OS X v10.5.) - (void) setRepresentedObject: (id) object Параметры

object

The receiver’s model object.

Наличие

Available in Mac OS X v10.5 through Mac OS X v10.5.

Объявлено в NSCollectionView.h

Примечание: Я видел это в документации:

Важно: В Mac OS X v10.5суперклассом класса NSCollectionViewItem был NSObject.В Mac OS X 10.6 и более поздних версиях NSCollectionViewItem теперь является подклассом NSViewController.Это изменение было сделано для улучшения репликации представления в NSCollectionView.NSCollectionViewItem остается двоично-совместимым с предыдущей реализацией, и разархивирование обрабатывается правильно.

Итак, если вы привыкли работать со старым API, возможно, произошли некоторые изменения с тех пор, как вы в последний раз делали это ... ???

...