Search code examples
iphoneuibuttonobjective-c-blocks

UIButton block equivalent to addTarget:action:forControlEvents: method?


I looked around, but couldn't find this on the internet, nor anywhere in the Apple docs, so I'm guessing it doesn't exist.

But is there a iOS4 blocks equivalent API to:

[button addTarget:self action:@selector(tappy:) forControlEvents:UIControlEventTouchUpInside];

I suppose this could be implemented using a category, but would rather not write this myself due to extreme laziness :)

Something like this would be awesome:

[button handleControlEvent:UIControlEventTouchUpInside withBlock:^ { NSLog(@"I was tapped!"); }];

Solution

  • I just implemented this. It work's like a charm!

    And it wasn't even hard.

    typedef void (^ActionBlock)();
    
    @interface UIBlockButton : UIButton {
        ActionBlock _actionBlock;
    }
    
    -(void) handleControlEvent:(UIControlEvents)event
                     withBlock:(ActionBlock) action;
    @end
    
    @implementation UIBlockButton
    
    -(void) handleControlEvent:(UIControlEvents)event
                     withBlock:(ActionBlock) action
    {
        _actionBlock = action;
        [self addTarget:self action:@selector(callActionBlock:) forControlEvents:event];
    }
    
    -(void) callActionBlock:(id)sender{
        _actionBlock();
    }
    @end