나는 Block 클래스, Row 클래스 및 Table 클래스의 세 가지 하위 클래스가 있습니다. 모두 NSView의 서브 클래스입니다.
프로그래밍 방식으로 8 개의 행을 표시하는 IB가있는 표가 있으며 각 표에는 8 개의 블록이 표시됩니다. 블록에서 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];
}
}
이것은 대답보다 많은 댓글로 보입니다. – mnel
나는 NSTableView를 사용하지 않기 때문에 시도 할 것입니다. 왜 그것이 작동하지 않는지 이해하고 싶었습니다. – BigCola