我有 3 个子类:一个 Block 类、一个 Row 类和一个 Table 类。都是 NSView 的子类。
我有一个用 IB 添加的表格,它以编程方式显示 8 行,每行显示 8 个块。我覆盖了 Block 中的 mouseDown: 方法以将背景颜色更改为红色,但它不起作用。不过,如果我使用 IB 直接在表格顶部添加一个块,它确实可以工作,所以我不明白为什么它在第一种情况下不起作用。
下面是 Block 和 Row 的实现代码(Table 的实现与 Row 的实现方式相同):
//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];
}
}