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

Pat*_*ick 6 macos cocoa objective-c nscollectionview

我想要一些类似于iWork如何为Pages设置模板选择屏幕,当你可以选择不同的模板,并且每个视图包含不同的信息有不同的大小等.

我已经尝试了继承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;
Run Code Online (Sandbox Code Playgroud)

}

and*_*n22 0

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

另外,我在 iWork 中没有看到类似的内容:其模板选择器中的所有视图都是相同的。(尽管它们的 NSImageView 子视图大小不同。)我建议如果可能的话使用相同的视图并适当地更改其子视图。例如,绑定文本字段的“隐藏”属性或更改图像视图的宽度很容易。难道你不能创建一个适用于这两个类的单一视图,根据所表示的对象适当地改变自身吗?