2010-02-22 59 views
6

我想类似的iWork如何对网页的模板选择屏幕时,您可以选择不同的模板,每个视图包含不同信息的东西有差异的大小等有没有办法在NSCollectionView中有不同的视图?

我试图继承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; 

}

+0

也许这可能会有所帮助:http://stackoverflow.com/questions/1210352/how-do-i-bind-programatically-in-the-view-subclass-of-my-nscollectionview?rq=1 – 2012-08-30 16:51:34

回答

0

(它甚至不似乎可能使一个NSCollectionView用不同大小的项目的意见;各尺寸将需要一些“主要”大小的倍数或整数除数,和你需要做大量的项目检查和 - 排序,以确保它甚至可以呈现在网格中。你确定你问的是正确的问题吗?)

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

相关问题