Blockクラス、Rowクラス、Tableクラスの3つのサブクラスがあります。すべてNSViewのサブクラスです。
プログラムで8行を表示するIBが追加されたテーブルがあり、各行には8ブロックが表示されます。BlockのmouseDown:メソッドを無効にして、背景色を赤に変更しましたが、機能しません。それでも、IBを使用してテーブルのすぐ上にブロックを追加すると、ブロックが機能するため、最初のケースでブロックが機能しない理由がわかりません。
ブロックと行の実装コードは次のとおりです(テーブルの実装は行の実装と同じように機能します)。
//block.m
- (void)drawRect:(NSRect)dirtyRect
{
[color set];
[NSBezierPath fillRect:dirtyRect];
}
-(void)mouseDown:(NSEvent *)theEvent
{
color = [NSColor redColor];
checked = YES;
[self setNeedsDisplay:YES];
}
//row.m
- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor blueColor] set];
[NSBezierPath fillRect:dirtyRect];
int x;
for(x=0; x<8; x++){
int margin = x*2;
NSRect rect = NSMakeRect(0, 50*x+margin, 50, 50);
Block *block = [[Block alloc] initWithFrame:rect];
[self addSubview:block];
}
}