Just one quick note, I just spent hours on this problem:
if you're adding your button to an UIImageView programmatically make sure that:
UIImageView.userInteractionEnabled = YES;
Otherwise button click action will not be called.
That's it, over and out