有没有办法在NSCollectionView中拥有不同的视图?

时间:2010-02-22 04:31:36

标签: objective-c cocoa macos nscollectionview

当我可以选择不同的模板时,我想要类似于iWork的页面模板选择屏幕的方式,并且每个视图包含不同的信息有不同的大小等。

我已经尝试了子类化NSCollectionView并使用newItemForRepresentedObject方法确定要显示的视图(而不是使用itemPrototype视图Interface Builder),但由于某种原因它没有正确定位视图,并且它没有显示正确的数字对于存在的项目数量的意见。这是我的代码。我希望有人可能有更好的方法来做到这一点,或者是如何做到这一点的一个例子。

personView和companyView是子类NSCollectionView中的属性,它们是IB中视图的IBOutlets。

-(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 :(得分:0)

(甚至似乎不可能使用不同大小的项目视图制作NSCollectionView;每个大小需要是某个“主”大小的倍数或整数除数,并且您需要执行大量项目 - 检查和重新排序,以确保它们甚至可以在网格中呈现。你确定你问的是正确的问题吗?)

另外,我在iWork中看不到这样的内容:其模板选择器中的所有视图都是相同的。 (虽然他们的NSImageView 子视图具有不同的大小。)我建议尽可能使用相同的视图并适当地更改其子视图。例如,绑定文本字段的“隐藏”属性或更改图像视图的宽度很容易。你不能制作一个适用于这两个类的单一视图,根据所代表的对象进行适当的改变吗?