Существует ли способ иметь переменные представления в NSCollectionView?

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

Я попытался разделить NSCollectionView на подклассы и определить, какое представление отобразить использование newItemForRepresentedObject метода (в противоположность использованию itemPrototype представление Interface Builder), но это по некоторым причинам не располагает представления правильно, и он не показывает корректному количеству представлений для количества существующих объектов. Вот мой код. Я надеялся, что у кого-то может быть лучший способ сделать это или пример того, как это сделано.

personView и companyView являются свойствами в разделенных на подклассы NSCollectionView, которые являются IBOutlets к представлениям в IB.

-(NSCollectionViewItem *)newItemForRepresentedObject:(id)object{
NSCollectionViewItem *collectionViewItem = [[NSCollectionViewItem alloc] init];

 [collectionViewItem setRepresentedObject:object];

 if([[object valueForKey:@"company"] boolValue] == YES){
     NSView *view = [companyView retain];
     [collectionViewItem setView:companyView];
 }else{
     [collectionViewItem setView:personalView];
 }

return collectionViewItem;

}

6
задан andyvn22 7 March 2010 в 04:58
поделиться

1 ответ

(Невозможно даже создать NSCollectionView с представлениями элементов разного размера; каждый размер должен быть кратным или целочисленным делителем некоторых "основной" размер, и вам нужно будет выполнить массовую проверку и переупорядочение элементов, чтобы убедиться, что их вообще можно отобразить в сетке. Вы уверены, что задаете правильный вопрос?)

Кроме того, я не вижу ничего подобного в iWork: все представления в его средстве выбора шаблона одинаковы. (Хотя их подпредставления NSImageView имеют разные размеры.) Я бы рекомендовал, если это вообще возможно, использовать одно и то же представление и соответствующим образом изменить его подпредставления. Например, легко привязать свойство «скрытого» текстовых полей или изменить ширину представления изображения.Разве вы не можете создать единое представление, которое работает для обоих классов, изменяясь соответствующим образом в зависимости от представленного объекта?

0
ответ дан 18 December 2019 в 04:52
поделиться