you do have the selector signature wrong, but you also need to initialize your handler class first either directly or lazily. Oh yea, and the property for the handler should be strong, not weak as you need your main class to retain the handler class. I'm assuming the button is on a Storyboard or Xib file. In that case it's good for the button to be weak because the Storyboard is retaining it strongly. If you class did as well, that would create a retain cycle.
Correct the property:
@property (nonatomic, strong) TCH_MainViewButtonHandler *buttonHandler;
Initialize the class before you set the selector on the button.
self.buttonHandler = [TCH_MainViewButtonHandler alloc]init];
note: probably a better practice to access the property via self rather then its instance _button..
then set the target on the button:
[self.changeColorButton addTarget:self.buttonHandler action:@selector(changeColorButton:) forControlEvents:UIControlEventTouchUpInside];
Note: the colon on the end of the selector is usually added if you let Xcode autocomplete. It references the parameter "sender" in this case.
Add a little NSLog(@"button pressed"); in the button action in your button handler and see if that does not get called. It should.
Now, normally UI events like button pushes are not normally delegated away because they end up doing something to the view and that needs to come from the controller managing the view. Although for a network call you might do it. If your button push is affecting the view i.e updating an label, you'll need to come back to the view controller for that purpose. So you have to think through that.
However, per your question, this answer should get you to the next step.
hope that helps, best wishes.