OSX: Programmatically added subviews not responding to mouse down events

Posted by BigCola on Stack Overflow See other posts from Stack Overflow or by BigCola
Published on 2012-10-28T17:39:39Z Indexed on 2012/10/29 5:02 UTC
Read the original article Hit count: 141

Filed under:
|
|
|

I have 3 subclasses: a Block class, a Row class and a Table class. All are subclasses of NSView. I have a Table added with IB which programmatically displays 8 rows, each of which displays 8 blocks. I overrode the mouseDown: method in Block to change the background color to red, but it doesn't work. Still if I add a block directly on top of the Table with IB it does work so I can't understand why it won't work in the first case.

Here's the implementation code for Block and Row (Table's implementation works the same way as Row's):

//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];
    }
}

© Stack Overflow or respective owner

Related posts about osx

Related posts about cocoa