你如何初始化NSCollectionViewItem?

时间:2011-05-31 22:44:37

标签: cocoa nsview nscollectionview nscollectionviewitem

我正在尝试在各个NSCollectionViewItem视图中设置一个具有自定义绘图的NSCollectionView。我有一个我需要在每个视图中绘制的图像,但我无法将视图链接回Interface Builder中的NSCollectionViewItem子类。是否有一个init方法,我可以使用我的NSCollectionViewItem来执行初始化操作?我试图实现copyWithZone,但我做错了,因为我得到了一些永恒的循环。目前,我发现连接到视图的唯一机会是使用 - (void)setSelected:(BOOL)标志更改选择之后。我想在视图中做我的绘图,但我需要一个来自我的代表对象的图像作为我的来源。我读到的与NSCollectionView相关的所有东西看似都不完整。

@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

2 个答案:

答案 0 :(得分: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 

你的样本:      - (void)setSelected:(BOOL)标志

我不懂语言,但BOOL是id?

  

setRepresentedObject:

     

设置接收者表示的对象   到指定的模型对象。   (适用于Mac OS X v10.5至   Mac OS X v10.5。)    - (void)setRepresentedObject:(id)object   参数

     

对象

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与先前的实现保持二进制兼容,并且正确处理了归档。

因此,如果您习惯使用较旧的API,可能会有一些更改,因为您上次这样做了...... ???

答案 1 :(得分:1)

  

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

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

  

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

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

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