2011-05-31 179 views
2

我想安装一个NSCollectionView具有自定义绘图在单独的NSCollectionViewItem视图。我有一张需要在每个视图中绘制的图像,但我无法将视图链接回Interface Builder中的NSCollectionViewItem子类。是否有一个init方法可以与我的NSCollectionViewItem一起使用以执行初始化操作?我试图实现copyWithZone,但是我做了一些错误的事情,因为我得到了一些永恒的循环。目前,我发现使我的视图连接的唯一机会是在选择更改后使用 - (void)setSelected:(BOOL)标志。我想在视图中进行绘制,但我需要从我的RepresentObject中提取图像作为源。我读过的所有与NSCollectionView相关的东西看起来都不完整。你如何初始化NSCollectionViewItem?

@implementation CollectionViewItem 
    -(void)setSelected:(BOOL)flag { 
     [super setSelected:flag]; 
     NSLog(@"setSelected: %d", flag); 
     // tell the view that it has been selected 
     [(CollectionViewItemView*)[self view] setSelected:flag]; 
     // This is where I pass my image to my view 
     [(CollectionViewItemView*)[self view] setOriginalSprite:[(MyModel*)self.representedObject imageSource]]; 
     [(CollectionViewItemView*)[self view] setNeedsDisplay:YES]; 
    } 
@end 
+0

... Mac OsX ??? – IAbstract 2011-05-31 23:15:55

回答

1

我发现这个文档 - NSCollectionViewItem class

我发现什么有显示设置,像这样的引用:

Setting the Represented Object 

    – representedObject Available in Mac OS X v10.5 through Mac OS X v10.5 
    – setRepresentedObject: Available in Mac OS X v10.5 through Mac OS X v10.5 

你的样品: - (空)的setSelected:(BOOL)标志

我不知道的语言,但是是BOOL一个ID?

setRepresentedObject:

接收机的表示对象 设置为指定的模型对象。 (提供的Mac OS X v10.5中通过 的Mac OS X v10.5中。) - (无效)setRepresentedObject:(ID)对象 参数

对象

The receiver’s model object. 

状况

Available in Mac OS X v10.5 through Mac OS X v10.5. 

宣称NSCollectionView.h

注意:我在文档中看到了这一点:

重要:在Mac OS X v10.5中,NSCollectionViewItem类的超类是NSObject。在Mac OS X v10.6及更高版本中,NSCollectionViewItem现在是NSViewController的一个子类。此更改是为了改进在NSCollectionView中复制视图的方式。 NSCollectionViewItem与前一个实现保持二进制兼容,正确处理unarchiving。

因此,如果您习惯于使用较旧的API,自上次做这些操作后可能会发生一些变化......

+0

我想我以前试过setRepresentedObject,但我一定是做错了。它这次工作。谢谢! – David 2011-05-31 23:58:53

1

我无法将视图链接回Interface Builder中的NSCollectionViewItem子类。

您应该将自定义视图中的元素绑定到文件所有者(其类应该是CollectionViewItem)表示的对象。例如,您的图像视图将被绑定到文件所有者,模型关键路径为representedObject.imageSource

是否有一个init方法可以与我的NSCollectionViewItem一起使用以执行初始化操作?

NSCollectionViewItemNSViewController的子类。因此,您可以覆盖-loadView以执行自定义初始化。例如,

@implementation CollectionViewItem 
… 
- (void)loadView { 
    [super loadView]; 
    self.someProperty = someDefaultValue; 
} 
… 
@end 
+0

我试过这个,但loadView永远不会触发。 – David 2011-05-31 23:58:26

+0

@David如果'-loadView'没有被发送,那么在你的设置中有一些奇怪的东西。我在我的两个项目中使用它,它工作得很好。如果您重写'-awakeFromNib'和/或'-initWithNibName:bundle:'会发生什么? – 2011-06-01 00:05:28

+2

我只是在尝试使用NSCollectionView和NSCollectionViewItem,我相信loadView只会被调用一次 - 当应用程序启动时。这是因为(恼人地)NSCollectionView只创建一个NSCollectionView(当应用程序启动时),然后每当需要为CollectionView创建的新NSView创建一个新的NSView时,从此原型创建一个copyWithZone。 – 2011-07-25 19:35:52