objective-c - 有没有办法在 NSCollectionView 中有不同的 View ?

标签 objective-c cocoa macos nscollectionview

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

我已经尝试子类化 NSCollectionView 并使用 newItemForRepresentedObject 方法确定要显示哪个 View (而不是使用 itemPrototype View 界面生成器),但由于某种原因它没有正确定位 View ,也没有显示正确的数字存在的项目数的 View 。这是我的代码。我希望有人可能有更好的方法来执行此操作,或者提供如何完成此操作的示例。

personView 和 companyView 是子类 NSCollectionView 中的属性,它们是 IB 中 View 的 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;

最佳答案

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

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

关于objective-c - 有没有办法在 NSCollectionView 中有不同的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308798/

相关文章:

objective-c - 控制程序执行顺序的技术

ios - iOS 上类似 ORM 的功能

swift - 如何处理转义键按下事件?

cocoa - 重新获取 NSFetchedResultsController 有什么作用吗?

cocoa - 再次单击应用程序图标时显示 Cocoa 应用程序的首选项

python - 使用多个 setup.py 脚本的多个项目?

ios - 如何在 SWRevealViewController 之前设置 Viewcontroller

objective-c - NSObject 子类是否有可能对每个属性访问 "hook in"

xcode - 如何阻止 NSPanel 窃取另一个应用程序的输入

macos - 在 Mac 上覆盖系统 vim