【发布时间】:2010-08-28 02:30:06
【问题描述】:
我想在我的 NSCollectionViewItem 的视图中放置一个自定义控件。
假设我有一个名为 BoxesView 的自定义 NSView。BoxesView 只是一个在其视图中绘制预定数量的框的视图。该数量的盒子是在 init 方法中设置的。假设我将其设置为 8。
当我加载集合视图时,视图中的所有其他控件(按钮、滑块等)都可以正常工作,但我的视图不会绘制。
如果我在 BoxesView 的 drawRect 方法中设置断点,它显示要绘制的框数为 0!如果我在 init 方法中设置断点,将 numBoxes 设置为 8,则表明 numBoxes 实际上设置为 8。此外,即使集合视图中有多行,init 方法也只会被调用 1 次。
我做错了什么?
更新
我能够通过将 itemPrototype 设置为从 xib 加载而不是与 NSCollectionViewItem 在同一个 xib 中来实现此功能。这很好,只是它只适用于 10.6 而不是 10.5。
更新 2
我想要做的是将我的自定义视图粘贴到已经存在的 NSCollectionViewItem 视图中。发生的情况是成员变量 mBoxWidth 被吹走并且为零,所以当它去绘制它时,什么也没有发生。
@implementation DumbView
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
mBoxWidth = 3;
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
NSRect bounds = self.bounds;
[[NSColor redColor]set];
[NSBezierPath fillRect:NSMakeRect(bounds.origin.x, bounds.origin.y, mBoxWidth, mBoxWidth)];
}
@结束
【问题讨论】:
-
你指的是哪个类的
init方法?init消息是从哪里发送的?您是否确认您正在检查集合视图项中同一视图的numBoxes属性? -
我说的是 BoxesView 的 init 方法。它被我的一个控制器中加载的笔尖调用。控制器是 NSCollectionView 的所有者
-
请编辑您的问题以包含您用于设置集合视图、加载项目视图以及创建和设置集合视图项目的代码。
标签: objective-c cocoa custom-controls nscollectionviewitem