NSCollectionViewItemのビュー内にカスタムコントロールを配置したいと思います。
BoxesViewというカスタムNSViewがあるとします。BoxesViewは、ビュー内に所定の数のボックスを描画する単なるビューです。そのボックスの数は、initメソッドで設定されます。8に設定したとしましょう。
コレクションビューをロードすると、ビュー内の他のすべてのコントロール(ボタン、スライダーなど)は正常に機能しますが、ビューが描画されません。
BoxesViewのdrawRectメソッドにブレークポイントを設定すると、描画するボックスの数が0であることが示されます。numBoxesを8に設定したinitメソッドにブレークポイントを設定すると、numBoxesが実際に8に設定されていることがわかります。また、コレクションビューに複数の行がある場合でも、initメソッドは1回だけ呼び出されます。
私は何が間違っているのですか?
アップデート
NSCollectionViewItemと同じxibにあるのではなく、xibからロードするようにitemPrototypeを設定することで、これを機能させることができました。これは素晴らしいですが、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)];
}
@終わり