2

我正在尝试设置一个在各个 NSCollectionViewItem 视图中具有自定义绘图的 NSCollectionView。我有一个需要在每个视图中绘制的图像,但我无法将视图链接回 Interface Builder 中的 NSCollectionViewItem 子类。是否有我可以与 NSCollectionViewItem 一起使用的 init 方法来执行初始化操作?我试图实现 copyWithZone,但我做错了,因为我得到了一些永恒的循环。目前,我发现与视图建立连接的唯一机会是在使用 -(void)setSelected:(BOOL)flag 更改选择之后。我想在视图中进行绘图,但我需要来自我的代表对象的图像作为我的源。我读到的与 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
4

2 回答 2

1

我找到了这个文档 - NSCollectionViewItem 类

我在那里发现的显示设置参考如下:

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)flag

我不懂语言,但我是BOOL身份证?

设置代表对象:

将接收者的表示对象设置为指定的模型对象。(在 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,那么自上次执行此操作以来可能已经发生了一些变化......???

于 2011-05-31T23:32:26.090 回答
1

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

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

Is there an init method I can use with my NSCollectionViewItem in order to perform initialization operations?

NSCollectionViewItem is a subclass of NSViewController. As such, you can override -loadView to perform custom initialisation. For instance,

@implementation CollectionViewItem
…
- (void)loadView {
    [super loadView];
    self.someProperty = someDefaultValue;
}
…
@end
于 2011-05-31T23:44:19.593 回答