【问题标题】:Is there a way to have varying views in an NSCollectionView?有没有办法在 NSCollectionView 中有不同的视图?
【发布时间】:2010-02-22 04:31:35
【问题描述】:

当您可以选择不同的模板时,我想要类似于 iWork 为 Pages 提供模板选择屏幕的东西,并且每个视图包含不同的信息具有不同的大小等。

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

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;

}

【问题讨论】:

标签: objective-c cocoa macos nscollectionview


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2013-08-22
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多