Есть ли способ иметь различные представления в NSCollectionView? - PullRequest
6 голосов
/ 22 февраля 2010

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

Я попытался создать подкласс NSCollectionView и определить, какое представление отображать, с помощью метода newItemForRepresentedObject (в отличие от использования ItemPrototype view 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;

}

1 Ответ

0 голосов
/ 07 марта 2010

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

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

...