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: 191
        
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