How to change the background color of a UIButton while it's highlighted?

ios, objective-c, uibutton, xcode

Solution

You can override `UIButton`'s `setHighlighted` method.

Objective-C

- (void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];

    if (highlighted) {
        self.backgroundColor = UIColorFromRGB(0x387038);
    } else {
        self.backgroundColor = UIColorFromRGB(0x5bb75b);
    }
}

Swift 3.0 and Swift 4.1

override open var isHighlighted: Bool {
    didSet {
        super.isHighlighted = isHighlighted
        backgroundColor = isHighlighted ? UIColor.black : UIColor.white
    }
}

Problem

At some point in my app I have a highlighted `UIButton` (for example when a user has his finger on the button) and I need to change the background color while the button is highlighted (so while the finger of the user is still on the button). I tried the following: ``` _button.backgroundColor = [UIColor redColor]; ``` But it is not working. The color remains the same. I tried the same piece of code when the button is not highlighted and it works fine. I also tried calling `-setNeedsDisplay` after changing the color, it didn't have any effect. How to force the button to change the background color?

Original source

Related problems